我只是对如何实现这部分代码有点困惑。
我需要从用户那里读入一个最多 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);
填空,组装,你将有一个有效的,安全的程序,它能按照你的要求去做。