将Malloc char指针传递给函数

时间:2014-10-19 18:41:33

标签: c

当我尝试从malloc传递main'字符指针以在user_input中使用以获取其中的字符串时。 while循环完成后,我正在尝试打印filename。当filename包含有效字符串时,void user_input(char *filename){ char ch; int i = 0; printf("Fil att leta i: "); while((ch = getchar()) == '\n'){ filename = realloc(filename, (i+1) * sizeof(char)); filename[i] = ch; i++; } filename[i] = '\0'; printf("filnamn = %s", filename); } int main(void){ char *filename; filename = (char *)malloc(sizeof(char)); user_input(filename); return 0; } 最终为空。

{{1}}

2 个答案:

答案 0 :(得分:3)

filename是一个按值传递的指针。在user_input函数

中执行此操作时
filename = realloc(filename, (i+1) * sizeof(char));

filename中的main不会发生变化。当您在filename中打印main时,指针已被重新分配,因此您会触发未定义的行为。

您需要通过指针传递filename。由于它已经是一个指针,你最终会得到一个双指针:

void user_input(char **filenamePtr)

现在你需要在main

中加一个指针
user_input(&filename);

并取消引用user_input

*filenamePtr = realloc(*filenamePtr, i+2);

请注意,sizeof(char)始终为1,因此您无需乘以它。您还要向i添加2而不是1,以便您有足够的空间来容纳空终结符'\0'

答案 1 :(得分:1)

改变这个:

while((ch = getchar()) == '\n')

进入这个:

while((ch = getchar()) != '\n')

阅读\n。您应该阅读 \n