【发布时间】:2020-02-20 13:41:47
【问题描述】:
我想从用户那里得到一个字符串(其实我是想控制长度,但是没办法),然后输出。我尝试了一种可行的方法(但我认为这不是一个好的解决方案,因为它很容易溢出或占用太多内存。任何人都可以提供更好的方法来做到这一点?
#include<stdio.h>
#include<stdlib.h>
int main(){
char p[1024]; //there if i use 'char *p=(char*)malloc(sizeof(char)*1024)' error too.
int i=0;
fgets(p,1024,stdin); //there if i use 'scanf("%s",p)', wrong.
while(p[i]!='\0'&&i<1024){
printf("%c",p[i]);
i++;
}
return 0;
}
谁能提供更好的方法来解释我的错误? 提前致谢。
【问题讨论】:
-
请缩进您的代码。
fgets有什么问题?什么不起作用?您得到的输出与您期望的输出有何不同?你可以edit你的问题。另请阅读:How to Ask -
对我来说很好。似乎是什么问题?
-
函数
fgets()如果你传递了正确的长度就不能溢出缓冲区,但是它可以截断输入。如果输入字符串包含换行符\n,那么它不会被截断。否则,如果字符串长度 + 终止符小于缓冲区大小,则不会被截断,但没有换行符(例如文件中的最后一行)。否则还有更多要读的。如果动态分配缓冲区,在这种情况下可以扩展,fgets()在前一个字符串终止符的位置重复。这可以循环完成,直到输入完成。 -
...请注意,您不需要检查
i<1024,因为fgets()保证提供您检查的字符串终止符。
标签: c pointers char scanf fgets