如果前一个数组在同一位置上为char,则填充数组

时间:2017-03-09 01:36:53

标签: c arrays string char

描述可能会非常混乱,因此示例会更好:

void fillKey (char **matrix, char **key, int length) {

   int k = 0;
   //fill key array until same num of chars
   for (int i = 0; i < length; i++) {
       //only fill at fields with alphab
       if ( isalpha(matrix[0][i]) != 0 ) {
           matrix[1][i] = key[1][k];
           k++;
           if ( k>= strlen(key[1]) )
               k = 0;
       }

   }

   printf("%s\n", matrix[0]);
   printf("%s\n", matrix[1]);
}

输入:Hello world!abc的键,结果应为:

Hello world!

abcab cabca!

但是,该函数在任何非alpha字符后停止工作。

Hello world!

abcab

我做错了什么?

编辑:已解决,跳过的数组字段为NULL,这意味着我必须复制非alpha字符。

2 个答案:

答案 0 :(得分:1)

如果第二个字符串中包含NULL字符,那么当您跳过复制空格时,printf将在第一个NULL字符处停止打印,该字符对应于第一个非alpha字符。

答案 1 :(得分:1)

void fillKey (char **matrix, char **key, int length) {

   int k = 0;
   //fill key array until same num of chars
   for (int i = 0; i < length; i++) {
       //only fill at fields with alphab
       if ( isalpha(matrix[0][i]) != 0 ) {
           matrix[1][i] = key[1][k];
           k++;
           if ( k>= strlen(key[1]) )
               k = 0;
       }
       else
       {
           matrix[1][i] = matrix[0][i];
       }
   }

   printf("%s\n", matrix[0]);
   printf("%s\n", matrix[1]);
}

我添加了else部分。如果不这样做,非字母字符的matrix[1][i]将为NULL,之后不会写任何内容。