c - 将字符串扫描到 C 中的二维数组中

标签 c string multidimensional-array

我需要将用户输入的 20 个单词放入二维数组中并打印出来 我当前的代码是

char array2[20][20];
int i;
for(i=0;i<20;i++)
{
    printf("enter a word\n");
    scanf(" %[^\n]",array2[i]);
}

for(i=0;i<colsize2;i++)
{
    printf("\n");
    for(j=0;j<rowsize2;j++)
    {
        printf("%c",array2[i][j]);
    }
}

(我不知道 %[^\n] 是什么,但它比 %c 或 %s 更好用)

没有编译器错误,程序会运行,但是当它在输入所有单词后打印数组时,我得到的完全是垃圾

喜欢

aş(M▒awn-US▒ e▒(<▒▒t/▒▒▒(5h▒tr:▒( qh▒tdle__000 HW5.exe▒`wauld▒(▒&Oe,▒*a▒+a▒▒

太多以至于需要滚动一下才能回到我的程序的开始

这个程序中确实有更多内容不在我的问题范围内,但我 99% 确定它不会与我这里的内容混淆,但如果您确实想查看其余部分,请询问

我真的刚刚开始编程所以我还不知道 diddly 蹲下所以如果你在回答时也能记住这一点这是学校作业所以它不需要完美它只需要完成工作

感谢回答这个问题的人,我已经为此苦苦挣扎了几个小时

最佳答案

格式字符串

" %[^\n]" 
 ^ note the leading space

表示 scanf 将首先读取并丢弃任意数量的前导空白字符,然后匹配包含换行符的任意字符序列。如果输入字符串对于调用未定义行为的缓冲区来说太大,scanf 可能会溢出它保存字符串的缓冲区。 %s 格式说明符意味着 scanf 跳过前导空白字符并读取输入字符串,直到它遇到一个空白,此时它将一个终止空字节附加到它写入的缓冲区进入然后返回。

因此,你需要的是

char array2[20][20];
int i;

for(i = 0; i < 20; i++)
    scanf("%19s", array2[i]);

for(i = 0; i < 20; i++)
    printf("%s\n", array2[i]);

关于c - 将字符串扫描到 C 中的二维数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23003779/

相关文章:

c++ - 无法对包含字符串 C++ 的结构数组进行操作

python - 如何在 Python 中替换包含大括号的字符串?

java - 在二维数组中切换数组大小需要不同的内存量

c++ - 无法添加二维数组的列和行

c - malloc 的问题

c - 未定义对 '_*' 链接器错误的引用

c - 无符号类型的大按位左移

arrays - 如何快速获取字符串数组中的最后 8 个字符?

php - 从 Paypal 支付意图多维数组中获取值

c - 使用 Visual Studio 2008/Visual C++ 2008 Express 学习 C