C 从二维字符数组打印字符串

C 从二维字符数组打印字符串,c,arrays,string,char,printf,C,Arrays,String,Char,Printf,我环顾四周,尝试了不同的语法,但我似乎无法让它工作。我知道这是基本的,但这不应该花太长时间去弄清楚 我有字符数组 char *roster[2][14] = { {"13", "10", "24", "25", "15", "1", "00", "4", "11", "23", "22", "32", "3", "35"}, {"Isaiah Briscoe", "Jonny David", "EJ Floreal", "Dominique Hawkins", "Isaa

我环顾四周,尝试了不同的语法,但我似乎无法让它工作。我知道这是基本的,但这不应该花太长时间去弄清楚

我有字符数组

char *roster[2][14] = {
      {"13", "10", "24", "25", "15", "1", "00", "4", "11", "23", "22", "32", "3", "35"},
      {"Isaiah Briscoe", "Jonny David", "EJ Floreal", "Dominique Hawkins", "Isaac Humphries", "Skal Labissiere", "Marcus Lee", "Charles Matthews", "Mychal Mulder", "Jamal Murray", "Alex Poythress", "Dillon Pulliam", "Tyler Ulis", "Derrick Willis"}
    };
然后我从数组中生成一个随机元素

random = rand() % 14;
printf("What is %s 's number?", roster[2][random]);
然后我试着打印出来,但失败了

printf("What is %s 's number?", roster[2][random]);
它输出

What is (null) 's number?
lldb显示printf语句跳转到

libsystem_c.dylib`strlen:
->  0x7fff9a596d32 <+18>: pcmpeqb (%rdi), %xmm0
    0x7fff9a596d36 <+22>: pmovmskb %xmm0, %esi
    0x7fff9a596d3a <+26>: andq   $0xf, %rcx
    0x7fff9a596d3e <+30>: orq    $-0x1, %rax
libsystem_c.dylib`strlen:
->0x7fff9a596d32:pcmpeqb(%rdi),%xmm0
0x7fff9a596d36:pmovmskb%xmm0,%esi
0x7fff9a596d3a:andq$0xf,%rcx
0x7fff9a596d3e:orq$-0x1,%rax
调用未定义的行为访问索引越界

因为您可以有索引
花名册[0][random]和花名册[1][random]
而不是
花名册[2][random]
,因为它被声明为-

char *roster[2][14] = {
  {"13", "10", "24", "25", "15", "1", "00", "4", "11", "23", "22", "32", "3", "35"},
  {"Isaiah Briscoe", "Jonny David", "EJ Floreal", "Dominique Hawkins", "Isaac Humphries", "Skal Labissiere", "Marcus Lee", "Charles Matthews", "Mychal Mulder", "Jamal Murray", "Alex Poythress", "Dillon Pulliam", "Tyler Ulis", "Derrick Willis"}
};
你可以把这些打印出来-

printf("What is %s 's number?", roster[1][random]);
或-


数组索引从
0
开始

对于
char*花名册[2][14],可能的索引为

roster[0][random];
roster[1][random];

c中的数组从0开始,因此如果声明:

char *roster[2]

那么您只能引用花名册[0]和花名册[1]。

如何失败?输出是什么?
random
是一个众所周知的系统函数名,在stdlib.h中定义。将变量名声明为与系统函数名相同是个坏主意。
roster[0][random];
roster[1][random];
char *roster[2]