c - 这两种在C中获取字符串输入的方法有什么区别?

标签 c string memory-management realloc

我正在学习 C 编程,我必须实现一个程序来读取未知大小的输入字符串。 我写了这段代码:

int main() {
    char *string;
    char c;
    int size = 1;

    string = (char*)malloc(sizeof(char));

    if (string == NULL) {
        printf("Error.\n");
        return -1;
    }
    printf("Enter a string:");
    while ((c = getchar()) != '\n') {
        *string = c;
        string = (char*)realloc(string, sizeof(char) * (size + 1));
        size++;
    }
    string[size - 1] = '\0';

    printf("Input string: %s\n", string);

    free(string);
    return 0;
}

但是最后一个 printf 不显示整个字符串,只显示最后一个字符。 所以如果我输入 hello, world 最后一个 printf 打印 d

经过一些研究,我尝试了 this代码,它有效!但我不明白我的区别。

我希望我说清楚了,谢谢你的关注。

最佳答案

在您的代码版本中,您将新读取的字符 c 分配给 string,使用:

*string = c;

*string 指向字符串的开头,因此您可以用新读取的字符替换字符串的第一个字符。

您链接到的代码执行以下操作:

str[i] = c

基本上,它使用索引i 将字符分配到字符串的末尾。

在您的代码版本中,您可以使用 size - 1 而不是 i

关于c - 这两种在C中获取字符串输入的方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34584089/

相关文章:

c - GTK message_dialog 和 unicode 字符串

C: 使用 realloc 的内存错误

c# - 如何在 C# 或 VB.NET 中格式化变量?

c++ - 是否需要标准分配器来分配连续内存?

iphone - 从后台返回后,iOS应用程序因内存警告而崩溃,但之前没有?

windows - 帮助我了解 Process Explorer 中的这些内存统计信息

c - FAT BPB 和小端反转

c - 显示更改时还包括程序的包含文件的颠覆工具

string - 如何根据另一个字符串表定义的顺序对一个字符串表进行排序(Lua)

c - 通过函数返回数组时出错