在C中访问字符串数组的第一个元素

Lou*_*s M 2 c arrays string

这可能是一个新手问题,但这是我的问题:

我想声明一个字符串数组但是当我访问第一个元素时,其他元素会与它连接起来.

#include <stdio.h>
int main(){
    char words[2][3] = {"foo", "bar"};
    printf("%s\n", words[0]); // I want to print foo
    printf("%s\n", words[1]); // I want to print bar
}
Run Code Online (Sandbox Code Playgroud)

哪个输出

foobar
bar
Run Code Online (Sandbox Code Playgroud)

虽然我在期待

foo
bar
Run Code Online (Sandbox Code Playgroud)

有人能解释一下:

  1. 刚刚发生了什么 ?
  2. 我如何得到我期待的行为?

usr*_*usr 10

您的数组word没有足够的空间用于字符串末尾的空字节,并且当您尝试将元素打印为C字符串(使用)时,它会导致未定义的行为%s.增加数组大小:

char words[2][4] = {"foo", "bar"};
Run Code Online (Sandbox Code Playgroud)