我正在尝试编写类似堆栈的东西并开发一个函数。 它应该最后打印出堆栈中的所有元素。 但即使输入应该不同,所有打印元素都是相同的。 基本上,我使用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);
}
答案 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);
}