繁体   English   中英

将Malloc char指针传递给函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM