假设我有一个多维数组:
char myArray[3][15]={
"foofoofoo\0",
"barfoofoo\0",
"foobarfoo\0"};
我是否必须运行循环以在myArray中设置新字符串,或者在C中是否有任何方法可以执行此操作:
myArray[][]={
"secondChain\0",
"newChain\0",
"foofoofoo\0"};
我对代码的神奇世界很陌生,所以请原谅我的问题,如果它是愚蠢的!
答案 0 :(得分:1)
如果你有C99支持复合文字,你不必在你的代码中编写循环(你可以使用memset()
的单个调用来完成这项工作,这会将循环隐藏在里面功能):
#include <stdio.h>
#include <string.h>
int main(void)
{
char myArray[3][15] = {"foofoofoo", "barfoofoo", "foobarfoo"};
printf("Before: %s %s %s\n", myArray[0], myArray[1], myArray[2]);
memcpy(myArray, ((char[3][15]){"secondChain", "newChain", "foofoofoo"}), sizeof(myArray));
printf("After: %s %s %s\n", myArray[0], myArray[1], myArray[2]);
return 0;
}
我使用的库(在Mac OS X 10.8.5上使用GCC 4.8.1)需要复合文字((char[3][15]){"secondChain", "newChain", "foofoofoo"})
周围的额外括号,因为memcpy()
和逗号都有宏定义如果它们没有包含在一组括号中,那么在复合文字中会混淆C预处理器:
mass.c: In function ‘main’:
mass.c:9:91: error: macro "memcpy" passed 5 arguments, but takes just 3
memcpy(myArray, (char[3][15]){"secondChain", "newChain", "foofoofoo"}, sizeof(myArray));
名义上,它们是不必要的。如果写的是:
(memcpy)(myArray, (char[3][15]){"secondChain", "newChain", "foofoofoo"}, sizeof(myArray));
没关系,因为这不是对函数式memcpy()
宏的调用。
答案 1 :(得分:0)
#include <stdio.h>
int main(){
char myArray[3][15]= {"foofoofoo", "barfoofoo", "foobarfoo"};
//Set New values here
strcpy(myArray[0], "Test1");
strcpy(myArray[1], "Test2");
strcpy(myArray[2], "Test3");
printf("%s, %s, %s", myArray[0], myArray[1], myArray[2]);
return 0;
}
输出:
Test1, Test2, Test3