描述可能会非常混乱,因此示例会更好:
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字符。
答案 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,之后不会写任何内容。