c - 一次在多维数组中写入一个字符串 C

标签 c string multidimensional-array

假设我有一个多维数组:

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

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

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

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

最佳答案

如果您的 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() 宏。

关于c - 一次在多维数组中写入一个字符串 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19488298/

相关文章:

c - 如何在C中找出一个双数是否有小数点后的任何数字

c - long long 数据类型的算术/逻辑运算

java - SQL BLOB 不以空值结尾。我该怎么做?

c++ - 多维数组C++中沿维度的最小值

c - free() 一个字符数组**

c - 有没有办法在 C 中倒带标准输入?

java - 如何将字符串输入保持在循环内

字符指针 : Creating dynamic string array, 赋值并传递给其他函数和其他小家伙 - C

c - 有没有更好的解决方案来避免我在 hackerearth 中出现 "memory exceeded"错误

json - SuperObject 多维数组