首页 > 解决方案 > 试图用命令行参数做一个简单的问题,指针让我难过

问题描述

我正在尝试反转每个命令行参数的字符。

这是我的主要方法中的唯一代码:

 for(int z = 1; z < argc; z++) //Loop through every argument
    {
        string arg = argv[z]; //Grab the argument
        string rebuildString; //Create a string to build the result
        for(int i = arg.size()-1; i >= 0; i--) //Loop through characters backwards 
        {
            char c = arg[i];
            rebuildString += c; 
        }

        char *rebuildChars; //So since argv is an array of pointers, I create a pointer here.
        *rebuildChars = rebuildString.c_str(); //Assign the value of the pointer
        argv[z] = rebuildChars; //Assign the current argument to the new value.
    }

    for(int x = 1; x < argc; x++)
    {
        cout << argv[x];
    }

我的指针出了点问题,我收到了一些不兼容的类型错误。谁能指出出了什么问题?

标签: c++

解决方案


让我大吃一惊的第一件事是您将指针分配给取消引用的char*.

    char *rebuildChars; //This is fine.
    *rebuildChars = rebuildString.c_str(); //ERROR! .c_str returns a char * !
    argv[z] = rebuildChars;

注意 string.c_str() 的声明是const char* c_str() const noexcept;(C++11)

而是尝试

    char *rebuildChars; //This is fine.
    rebuildChars = rebuildString.c_str(); //Here we assign a char * to a char *
    argv[z] = rebuildChars;

请参阅TutorialsPoint 上的参考。


推荐阅读