使用标量变量或指针来打印2D数组

时间:2016-10-07 06:50:08

标签: c linux pointers echo scalar

如何使用标量变量或指针打印2D字符串数组?程序需要执行系统命令“echo”来打印出所有字符串

输入:

char myarray[2][10] = {"Hello", "World"};
for (j=0;j<2;j++){    
    setenv ("myvar", myarray[j]);
    system("echo $myvar");       
}

实际输出:

Hello
World

预期产出:

Hello World

4 个答案:

答案 0 :(得分:3)

您可以通过简单地避免回显中的新行字符来解决您的问题。通过在manecho)上使用man echo命令,我们可以看到

  

-n不输出尾随换行符

所以我们可以通过替换

来做到这一点
system("echo $myvar"); 

通过

system("echo -n $myvar"); 

答案 1 :(得分:0)

使用-ne

system("echo -ne $myvar"); 

将光标留在包含Hello的行的开头。

答案 2 :(得分:0)

我找到了确切的解决方案。但是我仍然没有使用指针/标量变量。

char myarray[2][10] = {"Hello", "World"};

for (j=0;j<2;j++){    
setenv ("myvar", myarray[j]);
system("echo -n $myvar' '");      
}

答案 3 :(得分:0)

  

如何使用标量变量或指针来打印2D字符串数组

在特定条件下的数组衰减为指向其第一个元素的指针。其中一种情况是它们被分配(到右指针变量)。

char myarray[2][10] = {"Hello", "World"};

是一个char数组的数组。因此myarray[0]char[10]的数组。 char[10]的第一个元素是char

你可以做到

char * p = myarray[0];

然后p指向myarray[0]的第一个元素。它指向myarray[0][0]p获取myarray[0][0]分配的地址。

在此之后,您可以像这样修改您的代码:

for (j = 0; j < 2; j++) {    
  char p = myarray[j];
  setenv ("myvar", p);
  system("echo $myvar");       
}

代码使用p进行打印。

还有更简单的方法用C打印:

#include <stdio.h> /* for printf() */

...

for (j = 0; j < 2; j++) {
  char p = myarray[j];
  printf("%s", p);
}