: format specifies type 'int' but the argument has type 'size_t' (aka 'unsigned long') [-Werror,-Wformat]怎么办
时间: 2023-12-16 17:05:32 浏览: 245
ISO 14229-3-2012_ISO14229-2_ISO14229-3-2012_ISO14229-1_TheCommon
这个错误通常是由于 printf 或 sprintf 等函数中,格式字符串中的 %d 或 %i 等格式说明符后,传入的参数类型不正确导致的。因为 %d 或 %i 等格式说明符是用来表示整型数的,而 size_t 类型是无符号长整型,与 %d 或 %i 不兼容。
解决方法有两种:
1. 将参数强制转换为 int 类型:
```c
printf("%d", (int)size);
```
2. 使用 %zu 格式说明符,它是专门用来表示 size_t 类型的:
```c
printf("%zu", size);
```
不过,为了避免这种错误的发生,建议在编译时开启 -Wformat 选项,这样编译器会在编译时检查格式字符串和参数是否匹配,从而避免这种错误的发生。如果你使用的是 GCC 编译器,可以使用以下命令开启该选项:
```bash
gcc -Wformat -Werror source.c -o program
```
阅读全文