c语言 - 向用户读取字符串,直到使用"."



我只是对如何实现这部分代码有点困惑。

我需要从用户那里读入一个最多 256 个字符的字符串。如果用户输入字符串,则还应包括任何间距和换行符。当用户自己输入"."时,它将告诉程序输入已完成。输入完成后,程序会吐出具有相同间距和换行符的完全相同的字符串。

例如:

Please enter a string: This is just a test.
The input has not ended yet.
It will end when the user enters just a period.
.

计划返回:

This is just a test.
The input has not ended yet.
It will end when the user enters just a period.

到目前为止,我能想到的唯一方法是使用 fgets() 但我不太确定在使用"."完成输入时如何进行检查。我在想可能一个持续检查的循环?

任何帮助将不胜感激。谢谢!

这个想法是使用一个缓冲区,每次有新数据进入时都会重新分配它,并跟踪它的大小:

char* data = NULL;
size_t size = 0;

你的假设是正确的,你需要一个循环。像这样:

int end = 0;
while (!end) {
    char buf[512];
    if (fgets(buf, sizeof buf, stdin) == NULL) {
        // an error occured, you probably should abort the program
    }
}

您必须检查缓冲区是否实际上是要结束数据输入的令牌:

if (strcmp(buf, ".n") == 0) {
    // end loop
}

如果未找到令牌,则需要重新分配数据缓冲区,将其延长为刚刚读取的字符串长度:

size_t len = strlen(buf);
char* tmp = realloc(data, size + len + 1);   // ... plus the null terminator
if (tmp == NULL) {
    // handle your allocation failure
}

。并复制末尾的新内容:

data = tmp;
memcpy(data + size, buf, len);
size += len;
data[size] = '';                           // don't forget the null terminator

完成后,输出它并清理:

printf("%s", data);
free(data);

填空,组装,你将有一个有效的,安全的程序,它能按照你的要求去做。

相关内容

  • 没有找到相关文章

最新更新