c – 如何输入未知大小的字符串
发布时间:2020-12-16 03:44:33 所属栏目:百科 来源:网络整理
导读:我对C中的字符串有点困惑.我理解声明缓冲区大小很重要,否则会导致缓冲区溢出.但我需要知道如何获取一个我不知道其大小的字符串输入.例如,如果我想从用户那里获取一行文本作为输入,而我无法知道他们的文本有多长,我该怎么做呢? 我尝试在用户提供输入时动态分
我对C中的字符串有点困惑.我理解声明缓冲区大小很重要,否则会导致缓冲区溢出.但我需要知道如何获取一个我不知道其大小的字符串输入.例如,如果我想从用户那里获取一行文本作为输入,而我无法知道他们的文本有多长,我该怎么做呢?
我尝试在用户提供输入时动态分配内存.这是代码 – #include<stdio.h> #include<stdlib.h> int main() { char *str,ch; int size = 10,len = 0; str = realloc(NULL,sizeof(char)*size); if (!str)return str; while (EOF != scanf_s("%c",&ch) && ch != 'n') { str[len++] = ch; if (len == size) { str = realloc(str,sizeof(char)*(size += 10)); if (!str)return str; } } str[len] = ' '; printf("%sn",str); free(str); } 问题是,当我使用VS-2017编译它时,我得到这些错误 –
我认为动态分配内存(如上面的代码)应该可行,但我可能做错了.有没有办法让这项工作? 编辑:Word. 解决方法
>你应该使用getchar而不是scanf_s
>你应该使用int ch;不是char;对于EOF 以下代码可以工作: #include<stdio.h> #include<stdlib.h> int main() { char *str = NULL; int ch; size_t size = 0,len = 0; while ((ch=getchar()) != EOF && ch != 'n') { if (len + 1 >= size) { size = size * 2 + 1; str = realloc(str,sizeof(char)*size); } str[len++] = ch; } if (str != NULL) { str[len] = ' '; printf("%sn",str); free(str); } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |