将字符一个一个地添加到二维字符数组中
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], "");
编辑:我意识到我可以将问题简化为以下代码块:
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], "");