【问题标题】:problems converting character array to string array将字符数组转换为字符串数组的问题
【发布时间】:2014-04-05 11:10:03
【问题描述】:

嗨,我对编程很陌生,我需要一些小的帮助来将 char 数组转换为字符串,但我不确定哪里出了问题。我需要在 %c 中获取用户输入,并且我输入第一个输入 - aabcc,然后单击输入 第二个输入 - fsdff 然后再次输入 第三次输入 - rewrr 然后再次输入 第 4 个输入 - zzxcc 并再次输入 最后输入 - asdfg。

但是输出给了我 array 1 = aabcc , 2nd array = fsdf (其中一个丢失了) 3rd array = f '\n' ... 其次是 3rd 4th 和 5th array 显示不正确。提前谢谢大家。

int main()
{
   int i, j;
char ch[5][6];
char c[5][5];

for (i = 0; i < 5; i++)
    for (j = 0; j<5; j++)
        scanf("%c", &c[i][j]); // get user input

memcpy(ch[0], c[0], 5);
ch[0][5] = '\0';
memcpy(ch[1], c[1], 5);
ch[1][5] = '\0';
memcpy(ch[2], c[2], 5);
ch[2][5] = '\0';
memcpy(ch[3], c[3], 5);
ch[3][5] = '\0';
memcpy(ch[4], c[4], 5);
ch[4][5] = '\0';

printf("array 1 = %s, array 2 = %s , array 3 = %s , array 4 = %s , array 5 = %s ", ch[0], ch[1], ch[2], ch[3], ch[4]);
}

【问题讨论】:

标签: c string multidimensional-array char


【解决方案1】:

下面改scanf

scanf("%c", &amp;c[i][j]);

scanf(" %c", &c[i][j]);
       ^
       |
    space here

其背后的原因是,您输入的是aabcc&lt;Enter&gt;,输入缓冲区中有6 字符。 scanf("%c") 读取 a、a、b、c 和 c,将它们解释为 aabcc,但换行符仍在输入缓冲区中。这就是为什么当您尝试打印它们时也会看到换行符的原因。

【讨论】:

    【解决方案2】:

    您的 scanf 缓冲区 (c[][]) 太小,无法容纳单个条目中的所有字符。正如另一位作者指出的那样,您没有在静态分配中为 '\n' 字符添加空间。

    您的 scanf 字符数组 (c[][]) 的大小应为 = max no。字数 x(一个字中的最大字符数 + 1)

    加一是换行符。

    #define MAXWORDSIZE 5
    #define MAXWORDS 10
    
    char c[MAXWORDS][MAXWORDSIZE + 1];      // Newline character
    char ch[MAXWORDS][MAXWORDSIZE + 1 + 1]; // Newline and NUL character
    

    【讨论】:

      猜你喜欢
      • 2017-11-27
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 2011-06-18
      • 2012-01-10
      相关资源
      最近更新 更多