【发布时间】:2019-09-25 03:24:16
【问题描述】:
我制作了一个允许通过键盘输入字符串的函数。此函数有两个参数:字符串的最大可能长度和指向 char 的指针。函数内部发生的情况是,一个字符数组(其元素数与最大长度一样多)被声明,然后用户给出的字符串被临时存储在该数组中。字符串的获取完成后,我使用 calloc 函数分配恰到好处的内存量,以将相同的字符串存储在作为参数传递的 char 指针中。
int main(void)
{
char* test;
stringInput(test, 10);
printf("%s", test);
return 0;
}
void stringInput(char* string, int maxStringLength)
{
char tempString[maxStringLength];
//STRING GETS PROPERLY STORED IN tempString
string = (char*)calloc(strlen(tempString)+ 1, sizeof(char));
strcpy(string, tempString);
return;
}
这种工作,意味着如果我在这个函数返回之前尝试打印“字符串”,程序实际上会显示它应该显示的内容。但是,当我尝试在主函数中打印“test”时,它不会打印任何内容,这意味着 stringInput 不会修改传递给它的指针。我通过在函数调用之前、calloc 行之后和函数调用之后再次打印“test”的地址来进一步证实了这一点,这表明它在 calloc 之后发生了变化,但是在函数调用时又回到了之前的值结束。 我该如何解决这个问题?
【问题讨论】:
-
你不需要
void stringInput(char** string, int maxStringLength)吗?这是一个指向指针的指针;这将允许您在方法中对其进行修改。
标签: c pointers dynamic-memory-allocation pass-by-value