如何使用标量变量或指针打印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
您可以看到,您的问题可以通过简单地避免在echo中使用新行字符来解决。通过对echo
(man echo
)使用man
命令,我们可以看到
-n不输出尾随的换行符
我们可以通过替换
system("echo $myvar");
system("echo -n $myvar");
使用-ne
system("echo -ne $myvar");
将光标放在包含Hello
的行首
我找到了确切的解决方案。然而,我仍然没有使用指针/标量变量。
char myarray[2][10] = {"Hello", "World"};
for (j=0;j<2;j++){
setenv ("myvar", myarray[j]);
system("echo -n $myvar' '");
}
如何使用标量变量或指针打印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
打印
还有一种更简单的方法:
#include <stdio.h> /* for printf() */
...
for (j = 0; j < 2; j++) {
char p = myarray[j];
printf("%s", p);
}