c语言模拟实现strlen,为什么会有警告,详见图片
严重性 代码 说明 项目 文件 行 禁止显示状态
警告 C6328 大小不匹配: 已将“unsigned __int64”作为 Param(2) 传递,但需要使用“int”来调用“printf”。 test1.1 C:\c++\test1.1\test1.1\1.1.c 17
参数的类型与指定的类型不匹配
size_t 换int试试
强转
重新编译一下就OK了
【以下回答由 GPT 生成】
警告信息的原因是因为在printf函数中使用了格式控制符%d
来打印长度,但是实际上my_strlen函数返回的是一个int类型的值,而长度可能超过int类型的表示范围。
为了解决这个问题,可以将my_strlen函数返回值的数据类型修改为更适合表示较大长度的类型,比如size_t
。size_t
是一种无符号类型,它的长度可以保证足够大以表示较大的长度。
同时,还需要更改printf函数中的格式控制符,将%d
替换为%zu
,以正确打印size_t
类型的值。
以下是修改后的代码:
#include <stdio.h>
size_t my_strlen(char *str) {
size_t length = 0;
while (*str != '\0') {
length++;
str++;
}
return length;
}
int main() {
char *str = "Hello, World!";
size_t len = my_strlen(str);
printf("Length of the string is %zu\n", len);
return 0;
}
通过这种修改,即可避免警告,并且能够正确打印较大长度的字符串。
size_t类型输出格式用%z