我正在尝试编写堆栈之类的代码并开发一个函数。 它最终应该打印出堆栈中的所有元素。 但所有打印的元素都是相同的,即使输入应该不同。 基本上,我使用 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/