C语言
#include<stdio.h>int main()
{
char a = "abcde";
printf("%s",a);
}
为什么显示结果是abcde#? 我这里没有问题? 截张图 本帖最后由 耻思lhj 于 2020-4-15 17:12 编辑
你错误是因为,char a = "abcde";才是正确的,因为会给你在最后面补一个‘\0’。
你后面有个#可能是因为他后面有个‘\0’。
字符串输出%s,会在遇到‘\0’停止。 zltzlt 发表于 2020-4-15 17:08
截张图
本帖最后由 耻思lhj 于 2020-4-15 17:27 编辑
#include<stdio.h>
#include<string.h>
int main()
{
char a = "abcde";
printf("%s\n",a);
printf("size: %d\n",sizeof(a));
printf("len: %d\n",strlen(a));
return 0;
}
输出:
abcde
size:5
len:6
你的数组大小为5,长度为6.因为会补个'\0'。
有#是可能因为你的空间不够了,你的编译器没给你补个‘\0’,printf(“%s”)会继续往后走,直到遇到‘\0’。
老牛来学习 发表于 2020-4-15 17:19
把 char 改成 char 试试 老牛来学习 发表于 2020-4-15 17:19
C语言字符串会自动在末尾加一个'\0',所以 a 的大小应该设为 6 才对 字符串的长度是你所看到的长度+1
"abcde"的长度是6不是5,因为字符串都有一个结尾符'\0'
所以你将此字符串放到字符数组a中是会出问题的。导致没有结尾字符了,
那么输出的时候就会有各种乱码,直到偶然遇到了某个单元刚好是结尾字符'\0'才会结束。 有则加之,无则加免
页:
[1]