当我尝试从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}}
答案 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
。