数组输出

时间:2017-01-04 06:42:04

标签: c++ arrays

如果我设置一个数组变量a [] =" abc" ,然后设置另一个数组变量b [] = {' d',' e' f'},我的最后一个输出代码是printf(" ;%s",b),它的输出值是" defabc",为什么?我的输出是数组b,但输出值将首先输出数组b,然后输出数组一秒。 整个代码都在下面。

#include<stdio.h>
void main(){
  char a[]="abc";
  char b[]={'d','e','f'};
  printf("%s",b);
}

输出是&#34; defabc&#34;。 并且数组b的字符串长度是7为什么?

3 个答案:

答案 0 :(得分:3)

在C中,所有字符串都应为null(即\0)终止,因此您的第二个变量应如下所示:

char b[] = {'d', 'e', 'f', '\0'};

您可能很好奇为什么"defabc"会打印出您的代码。答案是,所有局部变量都存储在stack-based memory layout中。所以你的内存布局如下:

|'d' | <-- b
|'e' |
|'f' |
|'a' | <-- a
|'b' |
|'c' |
|'\0'|

另请注意,printf("%s", ...)会一直读到\0,因此printf("%s", a)按预期工作,但printf("%s", b)打印"defabc"

答案 1 :(得分:0)

两个字符串的末尾都需要一个空终止符。你的第二个字符串没有定义为字符数组。

答案 2 :(得分:0)

正确声明字符串的方法

char b[] = { 'd', 'e', 'f', '\0' };    // null terminator required

char b[] = "def";    // null terminator added automatically

因此,此代码将打印def作为输出

#include <stdio.h>

int main() {
    char a[] = "abc";
    char b[] = { 'd', 'e', 'f', '\0' };
    printf("%s", b);
    return 0;
}