c - 关于C指针

标签 c string pointers

我正在尝试编写堆栈之类的代码并开发一个函数。 它最终应该打印出堆栈中的所有元素。 但所有打印的元素都是相同的,即使输入应该不同。 基本上,我使用 getcwd 将其存储到 char 数组中。 然后我使用 element=the 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);
}

最佳答案

此时,对字符串如何操作的基本了解对您很有用。您可以找到一个 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
...

此外,如上所述,您应该熟悉您正在使用的函数的原型(prototype),如果它不返回 void,那么使用它返回的值通常是一个好主意确定结果是否可用。如果不是,则处理错误情况,和/或完全绕过其结果。

关于c - 关于C指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48914070/

相关文章:

c++ - 如何检查 malloc() 实现中返回数据的对齐?

c - 使用Texture2D OpenGL绘制到现有的HDC

c - 解析和嵌套指针

c++ - C++ 中的显式地址操作

c - 为什么++(*ptr) 递增指针?

c - 在c中使用lseek命令获取文件大小

php - 如何理解3行c代码?

c# - System.TypeCode 枚举中的异常字符串类型代码

Java Buffered reader 堆空间不足

c - 意外的 C 字符串定义行为