c语言模拟实现strlen

c语言模拟实现strlen,为什么会有警告,详见图片
严重性 代码 说明 项目 文件 行 禁止显示状态
警告 C6328 大小不匹配: 已将“unsigned __int64”作为 Param(2) 传递,但需要使用“int”来调用“printf”。 test1.1 C:\c++\test1.1\test1.1\1.1.c 17

img

参数的类型与指定的类型不匹配
size_t 换int试试

强转

重新编译一下就OK了

【以下回答由 GPT 生成】

警告信息的原因是因为在printf函数中使用了格式控制符%d来打印长度,但是实际上my_strlen函数返回的是一个int类型的值,而长度可能超过int类型的表示范围。

为了解决这个问题,可以将my_strlen函数返回值的数据类型修改为更适合表示较大长度的类型,比如size_tsize_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