编辑:我意识到我可以将问题简化为以下代码块:
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
我不确定如何解决这个问题。提前感谢您的帮助。
将unsigned char *
传递给strcpy()
、strcat()
等C标准库字符串函数是非常好的。为了消除警告消息,您可以简单地将unsigned char *
参数转换为char *
,同时将其传递给C标准库的字符串函数,如下所示:
strcpy((char *)arr[i], "");
由于arr
是一个静态定义的数组(维度是常量(,因此arr[i]
不会衰减为指针,而是一个50个字符的数组。因此,在这种情况下,您必须使用&arr[i][0]
将其专门转换为指针。这应该能解决问题。
顺便说一句,要将数组初始化为所有空字符串,使用arr[i][0] = ' ' 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] = ' ';
}
如果使用此方法,则不需要初始化数组。