老牛来学习 发表于 2020-4-15 17:05:21

C语言

#include<stdio.h>

int main()
{
    char a = "abcde";
    printf("%s",a);
}



为什么显示结果是abcde#?

qiuyouzhi 发表于 2020-4-15 17:07:09

我这里没有问题?

zltzlt 发表于 2020-4-15 17:08:29

截张图

耻思lhj 发表于 2020-4-15 17:10:53

本帖最后由 耻思lhj 于 2020-4-15 17:12 编辑

你错误是因为,char a = "abcde";才是正确的,因为会给你在最后面补一个‘\0’。
你后面有个#可能是因为他后面有个‘\0’。
字符串输出%s,会在遇到‘\0’停止。

老牛来学习 发表于 2020-4-15 17:19:49

zltzlt 发表于 2020-4-15 17:08
截张图

耻思lhj 发表于 2020-4-15 17:20:05

本帖最后由 耻思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’。

zltzlt 发表于 2020-4-15 17:21:09

老牛来学习 发表于 2020-4-15 17:19


把 char 改成 char 试试

liuzhengyuan 发表于 2020-4-15 17:21:36

老牛来学习 发表于 2020-4-15 17:19


C语言字符串会自动在末尾加一个'\0',所以 a 的大小应该设为 6 才对

sunrise085 发表于 2020-4-15 17:22:14

字符串的长度是你所看到的长度+1
"abcde"的长度是6不是5,因为字符串都有一个结尾符'\0'
所以你将此字符串放到字符数组a中是会出问题的。导致没有结尾字符了,
那么输出的时候就会有各种乱码,直到偶然遇到了某个单元刚好是结尾字符'\0'才会结束。

Draem 发表于 2020-4-15 17:28:33

有则加之,无则加免
页: [1]
查看完整版本: C语言