这是我的代码
#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/