如何打印二维数组字符的内容?

时间:2012-12-15 15:04:09

标签: c arrays string printing char

我正在尝试在C中打印一个字符数组但我无法打印所有内容。 我要打印: B1 B2 我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  char def[3][10];     //define a multidimensional array of characters 
  strcpy(def[0],"b1"); //insert "b1" at first line
  strcpy(def[1],"b2"); //insert "b2" at first line
  printf("%s",def);    //print everything?
}

以上代码仅打印b1。我已经尝试过了:

printf("%s",def[0]);
printf("%s",def[1]);

但是我有错误“无效使用带有未指定边界的数组”

3 个答案:

答案 0 :(得分:2)

printf("%s", def);

%s转换规范需要一个字符串。 def是一个字符串数组,而不是字符串。

要打印第一个字符串,请执行以下操作:

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

如果要打印第二个字符串,请执行以下操作:

printf("%s", def[1]);

如果你想打印两个字符串:

printf("%s%s", def[0], def[1]);

打印数组中的所有字符串:

for (i = 0; i < sizeof def / sizeof *def; i++)
{
    printf("%s", def[i]); 
}

答案 1 :(得分:0)

首先用语法初始化数组,这样整个数组就会得到null值。 然后执行相同的步骤,您可以在输出中获得字符串。

语法: char def [3] [10] = {};

或 首先定义这个数组,然后通过bzero函数使整个数组为零值。

bzero(DEF,的sizeof(DEF));

您需要在程序中包含stdlib.h头文件。

答案 2 :(得分:0)

您可以将char的整个多维数组打印为单个字符串,只需一次调用:

printf("%s", (char*) multiDimensionalArray);

因为多维数组的元素是连续的。但是,正如简单数组一样,printf在第一个终止字符处停止,所以它通常是没有意义的,因为我们几乎总是在每个“行”的末尾都有一个终止字符,就像你或者一些未初始化的垃圾一样。

char def[3][2];

memcpy(def[0], "b1", 2);
memcpy(def[1], "b2", 2);

def[2][0] = '\0';

printf("%s", (char*) def);  // print everything

但是以这种方式使用数组很痛苦,你需要的是数组上的循环。

(您只需使用*puts打印字符串)