将字符一个一个地添加到二维字符数组中

Add characters one by one to a 2d array of chars

编辑:我意识到我可以将问题简化为以下代码块:

unsigned char arr[20][50];

for(int i = 0; i<=20;i++){
        strcpy(arr[i],"");
}

for(int i = 0; i<=20; i++){
   for(int j = 0; j<5;j++){
        strcat(arr[i],"0");
   }
}

每当我使用 strcat()strcpy() 时,我都会在 Clion 中收到以下警告消息:

Passing 'unsigned char [50]' to parameter of type 'char *' converts between pointers to integer types where one is of the unique plain 'char' type and the other is not

我不确定如何解决这个问题。在此先感谢您的帮助。

由于 arr 是一个静态定义的数组(维度是常量),arr[i] 不会衰减为指针,但它本身是一个 50 个字符的数组。所以在这种情况下,您必须使用 &arr[i][0] 将其专门转换为指针。这应该可以解决它。

顺便说一句,要将您的数组初始化为 all-empty-strings,使用 arr[i][0] = '[=14=]' than strcpy` 效率更高。

此外,strcat 也不是很有效。由于您一次只是追加一个字符,因此保留字符串中下一个字符的索引并将该字符存储到它更有意义。然后你只需要确保在完成后终止字符串:

for(int i = 0; i <= 20; i++) {
    int idx = 0;
    for(int j = 0; j < 49; j++) {
        arr[i][idx++] = '0';
    }
    arr[i][idx] = '[=10=]';
}

并且如果使用这种方法,则不需要初始化数组。

unsigned char * 传递给 strcpy()strcat() 等 C 标准库字符串函数是完全没问题的。要摆脱警告消息,您可以简单地转换 unsigned char * 参数传递给 char *,同时将其传递给 C 标准库字符串函数,如下所示:

    strcpy((char *)arr[i], "");