【发布时间】:2015-02-11 12:42:46
【问题描述】:
我正在尝试编写一个从stdin 读取并写入stdout 的程序
一个不同长度的字符串数组,但我的程序只读取n-1字符串,虽然我特别告诉它读取n。
到目前为止,这是我想出的:
int main()
{
char **vectorschar;
int n, i;
char c;
printf("How many strings will you read? : ");
scanf("%d", &n);
vectorschar = (char**)calloc(n, sizeof(char*));
for(i = 0; i < n; i++)
{
vectorschar[i] = (char*)calloc(30, sizeof(char));
}
for(i = 0; i < n; i++)
{
gets(vectorschar[i]);
}
for(i = 0; i < n; i++)
{
puts(vectorschar[i]);
}
return 0;
}
你能指出我正确的方向吗?我仍在学习字符串、IO 和内存在 C 中的工作方式,如果这个问题很愚蠢而且很明显,我很抱歉。
【问题讨论】:
-
问:在输入了要输入的字符串数量之后,您立即按了哪个键?您在此处发布之前是否远程考虑过某种形式的最小调试? (最小的意思是
gets()循环中的一个简单的printf()或puts(),它会立即告诉你第一个字符串是空的)。和不相关的,停止使用gets();它是如此邪恶,它不再是标准库的一部分。 -
@WhozCraig ...b.但是调试真的很难!你必须考虑一些东西,运行一个调试器,记录一些东西,做笔记等等,而且没有一个比编码更有趣。如果你能骗到别人,何必费心呢?
-
@Martin James 我在大学一年级,不要对我太苛刻,伙计,没有人教过我如何使用调试器,而且我尝试过的大多数时候我都做不到弄清楚。所以,如果你能停止讽刺,那就太好了。谢谢你的回答。另外,这是我第一次编程,所以我想我最好不要再表现得像一个专家程序员那样犯这样的错误。跨度>
-
是的,我确实考虑过一个空字符串,但这也是我问这个问题的原因。我曾希望这部分科学领域的人对街区的新孩子不要那么难。@WhozCraig我不会使用它,但它是读取字符串的最简单方法,我被建议使用它
-
@andrei985 建议不要使用
gets()。任何时候代码有 IO 问题并且正在使用gets()和scanf(),是时候停止使用这两个了。fgets()和getline()是更好的用户 IO 替代方案。
标签: c arrays string memory-management