warning: format '%s' expects argument of type 'char *', but argument 2 has type 'char (*)[20]' [-Wformat=]|
时间: 2024-01-23 07:02:31 浏览: 165
这个警告是因为你在使用%s格式符时,传入了一个类型为char (*)[20]的参数,而%s只能接受一个char*类型的参数。可能是因为你在定义字符串数组时,使用了二维数组的形式,如char str[10][20],导致传入的参数类型不匹配。你可以尝试将字符串数组定义为一维数组形式,如char str[200],或者使用循环将二维数组中的每个字符串逐个输出。
相关问题
编译这些警告怎么处理/home/wdv4szh/jw_code/cs75_chery/vehicledataconversion/dbcConvert/src/CanDataConversion.cpp:992:42: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘char (*)[128]’ [-Wformat=] 992 | "Begin TriggerBlock %*s %s %d %d:%d:%lf %*s %d", | ~^ | | | char* 993 | &monthStr, &day, &hour, &minute, &second, &year); | ~~~~~~~~~ | | | char (*)[128] /home/wdv4szh/jw_code/cs75_chery/vehicledataconversion/dbcConvert/src/CanDataConversion.cpp:1000:42: warning: format ‘%s’ expects argument of type ‘char*’, but argument 3 has type ‘char (*)[128]’ [-Wformat=] 1000 | "Begin TriggerBlock %*s %s %d %d:%d:%lf %d", | ~^ | | | char* 1001 | &monthStr, &day, &hour, &minute, &second, &year); // 解析字符串为时间结构体 | ~~~~~~~~~ | | | char (*)[128]
这些警告是由于代码中的格式化字符串与传递的参数类型不匹配导致的。可以尝试使用正确的参数类型来解决这些警告。
对于第一个警告,应该将字符串参数改为指向字符数组的指针,而不是指向字符数组的指针数组,例如:
```c++
char monthStr[128];
sprintf("Begin TriggerBlock %*s %s %d %d:%d:%lf %*s %d",
width, "", monthStr, day, hour, minute, second, year);
```
对于第二个警告,也应将字符串参数改为指向字符数组的指针,例如:
```c++
char monthStr[128];
sprintf("Begin TriggerBlock %*s %s %d %d:%d:%lf %d",
width, "", monthStr, day, hour, minute, second, year);
```
format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
这个错误提醒是因为你在使用 printf 函数的时候,使用了 %s 格式符指定了一个字符串类型的参数,但是实际传入的参数却是一个 int 类型的变量,导致类型不匹配。
示例代码:
```c
int num = 100;
printf("The number is: %s", num); // 错误示例,应该使用 %d 格式符
```
解决方法是将 %s 改为 %d,因为 %d 是用来输出整数类型的格式符。
修改后的代码如下:
```c
int num = 100;
printf("The number is: %d", num); // 正确示例
```
阅读全文