关于C指针

时间:2018-02-21 19:35:01

标签: c string pointers

我正在尝试编写类似堆栈的东西并开发一个函数。 它应该最后打印出堆栈中的所有元素。 但即使输入应该不同,所有打印元素都是相同的。 基本上,我使用getcwd将它存储到char数组中。 然后我使用element = char数组更新了我的元素。

但是所有元素总是与我当前的路径相同,即使我没有调用此函数,我只需使用printf检查s.path。 我还检查了元素的地址,发现它们总是指向相同的地址。

int size=0;
char* path[255];

void push(char *input)
{
    char cwd[PATH_MAX];
    getcwd(cwd,PATH_MAX+1);
    path[size]=cwd;
    size++;
    chdir(input);
}

2 个答案:

答案 0 :(得分:0)

在这一点上,对如何操作字符串的基本理解对您有用。您可以找到一个 here here 以及更多 here

关键是,虽然不清楚你想要做什么,但在本节中应该使用字符串函数而不是赋值运算符:

int size=0;
//char* path[255];// pointer to char array is not needed
char path[PATH_MAX];// char array is sufficient for this purpose.
...
    char cwd[PATH_MAX];
    if(getcwd(cwd,PATH_MAX+1))// use results only if getcwd was successful.
    {
        //path[size]=cwd;// does not work
        strcpy( path, cwd );// this should work
    }
    else
    {
        // handle error
...

另外,如上所述,您应该熟悉正在使用的函数的原型,如果它不返回void,通常最好使用它返回的值来确定是否结果是可用的。如果没有,请处理错误情况,和/或完全绕过其结果。

答案 1 :(得分:0)

您似乎正在尝试保存字符串,但是当您超出范围时它将会丢失。

int size=0;
char* path[255];

void push(char *input)
{
    char* cwd = malloc(PATH_MAX * sizeof(char)); // Need a free when popping
    getcwd(cwd,PATH_MAX+1);
    //Save the pointer to the string in an array
    path[size]=cwd; //This doesn't do bounds checking
    size++;
    chdir(input);
}