gpt4 book ai didi

c - C 语言中字符数组的工作原理

转载 作者:行者123 更新时间:2023-11-30 15:26:13 25 4
gpt4 key购买 nike

我已经开始自学C语言了。我正在使用 Head First C。

下面的程序让我有点困惑:

#include <stdio.h>
int main()
{
puts("Hello World!");
puts("Enter your favorite Number:");
char arrayOfNumbers[3];
scanf("%2s",arrayOfNumbers);
//printf(arrayOfNumbers);
char s[] = {'a','b','c','d','e'};
printf(s);
return 0;
}

该程序的输出是:

Hello World!

Enter your favorite Number:

1

abcde1

我不明白的是,尽管我正在复制数组 arrayOfNumbers 中的输入“1”,然后打印数组“s”,但输出包含我输入的 1。输入是如何复制到数组's'的?

最佳答案

char s[] 缺少终止空字节 '\0',并且通过 printf 读取到了数组末尾。所以我想它会打印堆栈上的下一个值。像这样修复它并查看

#include <stdio.h>
int main()
{
puts("Hello World!");
puts("Enter your favorite Number:");
char arrayOfNumbers[3];
scanf("%2s",arrayOfNumbers);
//printf(arrayOfNumbers);
char s[] = {'a','b','c','d','e','\0'}; // see the added '\0' byte
printf(s);
return 0;
}

C 中的字符串需要一个不可打印的字节来标记字符串的结尾,有很多函数都需要这样,例如 strlenprintf 就是其中之一。如果您使用的是 Linux,valgrind会告诉你这件事

关于c - C 语言中字符数组的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461565/

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