2014-09-11 55 views
0

我想字符串值分配给C.二维数组截至目前,我有以下的代码,但它不工作,执行字符串数组的静态初始化:如何在C

char array[9][6]; 
    array[0][] = "[0x0a]"; 
    array[1][] = "[0x09]"; 
    array[2][] = "[0x0b]"; 
    array[3][] = "[0x08]"; 
    array[4][] = "[0x0d]"; 
    array[5][] = "[0x0c]"; 
    array[6][] = "[0x07]"; 
    array[7][] = "[0x5c]"; 
    array[8][] = "[0x22]"; 

如何我会做吗? 感谢

回答

4

如果你不想静态分配它们,然后用strcpy()功能:

#include <strings.h> 

int main(int argc, char const* argv[]) 
{ 
    char array[9][7]; 
    strcpy(array[0], "[0x0a]"); 
    strcpy(array[1], "[0x09]"); 
    strcpy(array[2], "[0x0b]"); 
    strcpy(array[3], "[0x08]"); 
    strcpy(array[4], "[0x0d]"); 
    strcpy(array[5], "[0x0c]"); 
    strcpy(array[6], "[0x07]"); 
    strcpy(array[7], "[0x5c]"); 
    strcpy(array[8], "[0x22]"); 

    return 0; 
} 

静态分配是这样的:

int main(int argc, char const* argv[]) 
{ 
    char array[9][7] = { 
     "[0x0a]", 
     "[0x09]", 
     "[0x0b]", 
     "[0x08]", 
     "[0x0d]", 
     "[0x0c]", 
     "[0x07]", 
     "[0x5c]", 
     "[0x22]" 
    }; 

    return 0; 
} 

(另外,第二维你的数组应该是7,而不是6.)

1

有两种方法可以做到这一点。无论是通过使用字符串常量静态初始化像你上面:

代码


#include <stdio.h> 

int main(void) { 
    int i; 
    char array[9][7] = { 
     "[0x0a]", 
     "[0x09]", 
     "[0x0b]", 
     "[0x08]", 
     "[0x0d]", 
     "[0x0c]", 
     "[0x07]", 
     "[0x5c]", 
     "[0x22]" 
    }; 
    for (i=0; i<9; i++) { 
     printf("%d: %s\n", i, array[i]); 
    } 

    return 0; 
} 

或者,使用指针的这样一个数组:

代码


#include <stdio.h> 

int main(void) { 
    int i; 
    const char* array[9] = { 
     "[0x0a]", 
     "[0x09]", 
     "[0x0b]", 
     "[0x08]", 
     "[0x0d]", 
     "[0x0c]", 
     "[0x07]", 
     "[0x5c]", 
     "[0x22]" 
    }; 
    for (i=0; i<9; i++) { 
     printf("%d: %s\n", i, array[i]); 
    } 

    return 0; 
} 

样品试验


0: [0x0a] 
1: [0x09] 
2: [0x0b] 
3: [0x08] 
4: [0x0d] 
5: [0x0c] 
6: [0x07] 
7: [0x5c] 
8: [0x22] 

注意的是,在第一个例子中,所有的字符串的长度相同(你有一个错误,他们应该是7个字符长,以适应空/ '\0'终止C风格的字符串),并且所有字符串都是可读写的。在第二个例子中,字符串不需要是相同的长度,它们可以是不同的。它们也是只读的,就像以这种方式使用的任何字符串文字一样。

推荐阅读


  1. 声明的字符串和分配的字符串之间的区别,访问的2014年9月3日,<https://stackoverflow.com/questions/16021454/difference-between-declared-string-and-allocated-string>
1

阵列没有赋值运算符。任一组值被定义的阵列时,例如:

char array[9][6] = 
{ 
    "[0x0a]", "[0x09]", "[0x0b]", "[0x08]", "[0x0d]", 
    "[0x0c]", "[0x07]", "[0x5c]", "[0x22]" 
}; 

或通过使用标准功能strcpy

char array[9][7]; 
    strcpy(array[0], "[0x0a]"); 
    strcpy(array[1], "[0x09]"); 
    strcpy(array[2], "[0x0b]"); 
    strcpy(array[3], "[0x08]"); 
    strcpy(array[4], "[0x0d]"); 
    strcpy(array[5], "[0x0c]"); 
    strcpy(array[6], "[0x07]"); 
    strcpy(array[7], "[0x5c]"); 
    strcpy(array[8], "[0x22]"); 

在最后一种情况下所述阵列的元件的尺寸应等于7,包括终止零或大小可以等于6,但你必须使用功能strncpy,而不是strcpy

考虑到这样的数组初始化仅在C.在C++中,你必须指定一个等于7的元素的大小,以包含字符串文字的终止零。

+0

@ Matt McNabb谢谢,这是由于复制和粘贴造成的错字。 – 2014-09-11 04:23:41