Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何打印字符串数组的内容?_C_Arrays_String_Pointers - Fatal编程技术网

C 如何打印字符串数组的内容?

C 如何打印字符串数组的内容?,c,arrays,string,pointers,C,Arrays,String,Pointers,我已使用以下字符串创建并初始化了一个数组: char print_names[][10] = {"\t\t1. John\n", "\t\t2. Smith\n", "\t\t3. Jane\n", "\t\t4. Mary\n", "\t\t5. Lisa\n"}; 据我所知,数组的名称

我已使用以下字符串创建并初始化了一个数组:

char print_names[][10] = {"\t\t1. John\n",
                          "\t\t2. Smith\n",
                          "\t\t3. Jane\n",
                          "\t\t4. Mary\n",
                          "\t\t5. Lisa\n"};
据我所知,数组的名称本身就是一个指针。因此,当我把这些行:

    printf("%c", *print_names[0]);
    printf("%c", *print_names[1]);
它应该指向该数组元素的内容。但控制台上没有打印任何内容

我进入了调试器,它清楚地显示每个元素都包含适当的字符串。我不确定我哪里做错了

编辑:我还在学习数组和指针的基本知识,所以我没有在文件中包含

附加问题:是否可以不使用字符串打印内容(名称)


嗯。我想出来了。我想我现在明白了。谢谢回答。

*打印姓名[0]
等于
打印姓名[0][0]
。它是
print\u names
中第一个字符串的第一个字符

由于
print\u names
数组中每个字符串的第一个字符都是一个选项卡(
'\t'
),因此您可以打印这个实际上不可见的选项卡

如果要打印字符串本身,需要使用
%s
作为格式,并传递指向第一个字符的指针。这可以通过以下方式实现:

printf("%s", print_names[0]);

另一方面,如果要打印选项卡并使其可见,请使用其他字符环绕输出。像

printf("tab = \"%c\"\n", print_names[0][0]);

它将打印由双引号包围的选项卡。

*打印名称[0]
等于
打印名称[0][0]
。它是
print\u names
中第一个字符串的第一个字符

由于
print\u names
数组中每个字符串的第一个字符都是一个选项卡(
'\t'
),因此您可以打印这个实际上不可见的选项卡

如果要打印字符串本身,需要使用
%s
作为格式,并传递指向第一个字符的指针。这可以通过以下方式实现:

printf("%s", print_names[0]);

另一方面,如果要打印选项卡并使其可见,请使用其他字符环绕输出。像

printf("tab = \"%c\"\n", print_names[0][0]);

它将打印由双引号包围的选项卡。

数组
print\u name
有两个维度:

  • 元素的数量由初始值设定项确定:在您的示例中为5
  • 数组中每个元素的
    char
    元素数定义为
    10
问题是5个初始值设定项正好有10个字符,一个有11个字符。初始值设定项与对象定义不一致,并且所有元素都不是以null结尾的字符串

您应该将宽度至少更改为12,并且可以使用
printf()
以以下方式打印数组元素:

#包括
无效打印_数组(){
char print_name[][12]={
“\t\t1.John\n”,
“\t\t2.Smith\n”,
“\t\t3.Jane\n”,
“\t\t4.Mary\n”,
“\t\t5.Lisa\n”
};
size\u t count=sizeof(打印名称)/sizeof(打印名称[0]);
对于(大小i=0;i
关于你的方法:

据我所知,数组的名称本身就是一个指针

不完全是这样:数组的名称就是这样。在表达式中使用数组名而不是
sizeof(n)
时,它会衰减为指向数组第一个元素的指针

下面的行输出第一个和第二个字符串的第一个字节:

printf("%c", *print_names[0]);  // same as print_names[0][0]
printf("%c", *print_names[1]);  // same as print_names[1][0]

数组
print\u names
有两个维度:

  • 元素的数量由初始值设定项确定:在您的示例中为5
  • 数组中每个元素的
    char
    元素数定义为
    10
问题是5个初始值设定项正好有10个字符,一个有11个字符。初始值设定项与对象定义不一致,并且所有元素都不是以null结尾的字符串

您应该将宽度至少更改为12,并且可以使用
printf()
以以下方式打印数组元素:

#包括
无效打印_数组(){
char print_name[][12]={
“\t\t1.John\n”,
“\t\t2.Smith\n”,
“\t\t3.Jane\n”,
“\t\t4.Mary\n”,
“\t\t5.Lisa\n”
};
size\u t count=sizeof(打印名称)/sizeof(打印名称[0]);
对于(大小i=0;i
关于你的方法:

据我所知,数组的名称本身就是一个指针

不完全是这样:数组的名称就是这样。在表达式中使用数组名而不是
sizeof(n)
时,它会衰减为指向数组第一个元素的指针

下面的行输出第一个和第二个字符串的第一个字节:

printf("%c", *print_names[0]);  // same as print_names[0][0]
printf("%c", *print_names[1]);  // same as print_names[1][0]

由于数组尺寸过大(有10个条目,但只填充了5个,其他条目则填充了
NULL
指针),因此可以使用以下方式打印数组内容(每行一个字符串):

这相当于此代码:

int i;
for (i = 0; print_names[i]; i++)
    printf("%s", print_names[i]);
如果您知道数组中有5个元素:

int i;
for (i = 0; i < 5; i++)
    printf("%s", print_names[i]);
inti;
对于(i=0;i<5;i++)
printf(“%s”,print_名称[i]);

由于数组尺寸过大(有10个条目,但只填充了5个,其他条目则填充了
NULL
指针),因此可以使用以下方式打印数组内容(每行一个字符串):

这相当于此代码:

int i;
for (i = 0; print_names[i]; i++)
    printf("%s", print_names[i]);
如果您知道数组中有5个元素:

int i;
for (i = 0; i < 5; i++)
    printf("%s", print_names[i]);
inti;
对于(i=0;i<5;i++)
printf(“%s”,print_名称[i]);

它可以工作,但是因为每行的第一个元素是\t,所以您将看不到任何您也可以使用的东西

printf(“%s”,打印名称[0])

要打印:\t\t1。约翰\n
这一排


请注意,在数组的第二维度中放置了10个以上的字符

它可以工作,但是因为每行的第一个元素是\t,所以您将看不到任何您也可以使用的东西

printf(“%s”,打印名称[0])

对p