[英]Passing Malloc char pointer to function
当我尝试从main
传递malloc
char指针以在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;
}
filename
是一个按值传递的指针。 在user_input
函数中执行此操作时
filename = realloc(filename, (i+1) * sizeof(char));
main
filename
保持不变。 当您在main
打印filename
时,指针已被重新分配,因此您将触发未定义的行为。
您需要通过指针传递filename
。 由于它已经是一个指针,因此您将获得一个双指针:
void user_input(char **filenamePtr)
现在您需要在main
菜单中使用一个指针
user_input(&filename);
并在user_input
取消引用:
*filenamePtr = realloc(*filenamePtr, i+2);
请注意, sizeof(char)
始终为1
,因此您不需要乘以它。 另外,您在i
加上2,而不是1,以便为空终止符'\\0'
留出足够的空间。
更改此:
while((ch = getchar()) == '\n')
到这个:
while((ch = getchar()) != '\n')
你只读过\\n
。 你应该阅读什么,但 \\n
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.