这可能是一个简单的问题,但我是C的新手,却找不到任何答案。我的程序很简单,在for循环中需要21行字符串输入,然后打印出来。数量可能更少或更多。
int t = 21;
char *lines[t];
for (i = 0; i < t; i++) {
lines[i] = malloc(100);
scanf("%s", lines[i]);
}
for (int i = 0; i < t; i++) {
printf("%s\n", lines[i]);
free(lines[i]);
}
...
所以当我复制&amp;一次粘贴输入,我的程序挂起,没有错误,没有崩溃。如果只有20行或以下,那就没关系。如果我逐行手动输入,无论输入数量多少,它都能正常工作。
我在Mac OS X 10.10中使用XCode 5,但我认为这不是问题。
更新:
我试图在程序挂起时调试它,它在下面一行的i == 20
时停止:
0x7fff9209430a: jae 0x7fff92094314 ; __read_nocancel + 20
这个问题可能与scanf
有关,但它很混乱,为什么数字20?可能是我以错误的方式使用它,非常感谢任何帮助。
更新
我尝试使用CLI gcc
编译程序。它工作得很好。所以,最终是XCode的问题。不知何故,它会阻止用户粘贴多个输入。
答案 0 :(得分:2)
如果要在C中读取字符串,请使用fgets,并查看有关该函数的文档:
所以你应该像这样使用它:
var $el = $('#your-input-id');
$el.wrap('<form>').closest('form').get(0).reset();
$el.unwrap();
因此它会从用户的输入中获取字符串,您可以查看这两个帖子以及在C中读取字符串:
我希望这能帮助你解决问题。
修改:
fgets (lines[i],100,stdin);
此代码给出:
正如你所看到的,我得到了21个字符串(从0到20,这就是为什么它在i == 20时停止)。
我尝试了你的输入,结果如下:
答案 1 :(得分:0)
我写了相同的代码然后跑了。有用。 每行可能包含超过99个字符(包括换行符)... 或者它可能包含空格和制表符。
的scanf(3)
当格式字符串中出现一个或多个空白字符(空格,水平制表符\ t,垂直制表符\ v,换页符\ f,回车符\ r \ n,换行符或换行符\ n)时,输入数据到第一个读取非空白字符,或者直到不再有数据为止。如果输入数据中没有找到空格字符,则扫描完成,函数返回。
为避免这种情况,请尝试
scanf ("%[^\n]%*c", lines[i]);
整个代码是:
#include <stdio.h>
int main() {
const int T = 5;
char lines[T][100]; // length: 99 (null terminated string)
// if the length per line is fixed, you don't need to use malloc.
printf("input -------\n");
for (int i = 0; i < T; i++) {
scanf ("%[^\n]%*c", lines[i]);
}
printf("result -------\n");
for (int i = 0; i < T; i++) {
printf("%s\n", lines[i]);
}
return 0;
}
如果您仍然继续遇到问题,请向我们展示输入数据和更多详细信息。最好的问候。