1

假设我有一个多维数组:

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

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

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

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

4

2 回答 2

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;
}

((char[3][15]){"secondChain", "newChain", "foofoofoo"})对于我使用的库(在 Mac OS X 10.8.5 和 GCC 4.8.1 上),复合文字周围的额外括号是必需的,因为复合文字中有一个宏定义,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()宏的调用。

于 2013-10-21T07:32:17.323 回答
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
于 2013-10-21T07:22:48.747 回答