这是我的代码
#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 和 @ 之间还有另一个不可打印的字符。我是菜鸟,所以也许我错过了一些明显的事情。有人能帮我吗?
edit:
只需多加一个空格即可,例如 char pal[9] = "ciaopanic"; char pal 1[8] = "混乱";
它有效,但为什么呢?我知道 \0 应该有一个空格,但是“ciaoaic”没有它就可以工作......
1.当您将它们传递给空终止符时,您不会为空终止符留出空间strlen()
,因此您的代码显示未定义的行为 -
char pal[8] = "ciaooaic";
char pal1[7] = "ciaoaic";
留出空间'\0'
。像这样声明和初始化 -
char pal[9] = "ciaooaic";
char pal1[8] = "ciaoaic";
2. And strlen()
回报size_t
not int
,所以这样写 -
size_t lenPal = strlen(pal);
size_t lenPal1 = strlen(pal1);
and use %zu
说明符打印这两个变量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)