【发布时间】:2017-12-03 22:02:47
【问题描述】:
我正在尝试创建一个具有可变起始长度的数组来获取字符串。代码应该计算单词并调整数组的大小,但这只是一个测试,我在这里公开它是因为我想知道这是一个好的做法还是一个错误。如果有什么我应该知道的,或者我必须记住的。
注意,我说的是 C,不是 C++
#include <stdio.h>
int main()
{ int c,b,count;
scanf("%d",&c);
count=c+1;
getchar();
char a[count];
for ( c=b=0 ; c!=count && b!='\n' ; c++ )
{
b=getchar();
a[c]=b;
}
a[c]='\0';
printf("%s",a); printf("%d",c-1);
}
我不需要在执行时更改数组的大小。
我正在测试,我不记得为什么我第一次使用 c 变量而不是直接使用 count,但我记得第一个 getchar 是刷新缓冲区,因为它没有无需 getchar 即可工作。
我不知道为什么我需要放 getchar。如果我删除 getchar 程序将失败。
无论如何,该程序运行良好。第一次运行时,它需要一个带有 scanf 的数字,然后是文本。
如果文本大于数组的大小,程序将忽略它。
数字是数组的大小。
我的问题是:
a[variable] 做这项工作是个好习惯吗?
为什么我需要 getchar?
它将是便携式的吗?我的意思是,我不知道某些系统或标准是否像某些旧的 C 编译器一样不接受这一点。
有更好的方法吗?
【问题讨论】:
-
VLA 在 C99 中受支持,但在旧版 C 和 C++ 中均不支持,这使得您的代码非常难以移植,因此可能不是一个很好的做法。
-
泰。我不知道 getchar 发生了什么
-
@goodvibration 现在距离 C99 已有 18 年了,这肯定是为每个人更新编译器的足够时间。其他语言无关
-
@goodvibration“非常不便携”?!这已经是 18 年的标准了。就好像您建议在 HTML 页面上使用
<blink>以与 Netscape 2.0 兼容。 C和C++也是不同的语言。你建议哪种洋泾浜克里奥尔语? -
这个问题真的是关于
getchar()和数组无关(除了数组溢出的情况)