我想从用户那里得到一个字符串(其实我想控制长度,但是没办法),然后输出。我尝试了一种可行的方法(但我认为这不是好的解决方案,因为它很容易溢出或占用太多内存。任何人都可以提供更好的方法吗?
#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
做不到这一点。你给它一个硬编码的大小,希望输入适合,如果输入不适合,它就会被截断。
相反,您可以使用新的(呃)getline
,如果你的编译器是 POSIX 兼容的:
#include <stdio.h>
#include <stdlib.h>
int main() {
char *p = NULL;
size_t size = 0;
getline(&p, &size, stdin);
for (int i = 0; p[i] != '\0' &&i < size; i++)
printf("%c", p[i]);
free(p);
printf("size %zu",size);
return 0;
}
这样你就不用担心缓冲区的大小了。 getline
负责这件事。您只需要在用完内存后释放
内存即可。
关于c - 从用户那里获取字符串的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58537588/