gpt4 book ai didi

c - 字符串比 C 语言中预期的要长

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:08 25 4
gpt4 key购买 nike

这是我的代码

#include <stdio.h>
#include <string.h>

int main(){
char pal[8] = "ciaooaic";
char pal1[7] = "ciaoaic";
int lenPal = strlen(pal);
int lenPal1 = strlen(pal1);
printf("strlen('%s'): %d\n", pal, lenPal);
printf("strlen('%s'): %d\n", pal1, lenPal1);
return 0;
}

问题是,当我运行这段代码时,输​​出是:

strlen('ciaooaicP@'): 11
strlen('ciaoaic'): 7

第一个字符串在 P 和 @ 之间还有另一个不可打印的字符。我是菜鸟,所以也许我错过了一些明显的东西。有人可以帮助我吗?

编辑:

just give one extra space like char pal[9] = "ciaooaic"; char pal1[8] = "ciaoaic";

它有效,但为什么呢?我知道\0 应该有一个空格,但是“ciaoaic”没有它也能工作...

最佳答案

1. 当您将空终止符传递给 strlen() 时,您没有为空终止符留出空间,因此您的代码表现出未定义的行为 -

char pal[8] = "ciaooaic";
char pal1[7] = "ciaoaic";

'\0'留一个空格。像这样声明和初始化 -

char pal[9] = "ciaooaic";
char pal1[8] = "ciaoaic";

2.strlen() 返回 size_t 而不是 int ,所以这样写 -

size_t lenPal = strlen(pal);
size_t lenPal1 = strlen(pal1);

并使用 %zu 说明符打印这两个变量。

关于c - 字符串比 C 语言中预期的要长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33707486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com