一次在多维数组中写一个字符串C.

时间:2013-10-21 07:15:51

标签: c string multidimensional-array

假设我有一个多维数组:

char myArray[3][15]={
"foofoofoo\0",
"barfoofoo\0",
"foobarfoo\0"};

我是否必须运行循环以在myArray中设置新字符串,或者在C中是否有任何方法可以执行此操作:

myArray[][]={
"secondChain\0",
"newChain\0",
"foofoofoo\0"};

我对代码的神奇世界很陌生,所以请原谅我的问题,如果它是愚蠢的!

2 个答案:

答案 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