字符串与2d数组C比较

时间:2013-09-20 15:07:49

标签: c arrays string

我正在考虑将字符串复制到2d数组。我有一个2d字符数组初始化为char labels[100][2]所以它是一个100 * 2数组。我希望每行的第一列包含一个字符串,我知道你不能简单地指定一个字符串,你必须做一个字符串副本。我的想法是我能做到的:

strcpy(labels[1][0],"hi");//The compiler doesn't like this

经过研究,我看到了一个你可以做到的想法:

strcopy(labels[1],"hi")

我对此感到好奇,因为这个strcpy处于for循环中,所以我可能会有十个副本,我不知道这是否会正确复制到第一个每次都是专栏。

3 个答案:

答案 0 :(得分:0)

要处理2D数组的列,您可以这样做;

char labels[100][2], (*p)[2], i;
....

for (p = &labels[i]; p < &labels[100]; P++)
    (*P)[i] = //assign a char

答案 1 :(得分:0)

我很好奇你的陈述&#34;你不能简单地指定一个字符串&#34;。这是事实,但您可以指定一个指向字符串文字的指针。为什么不简化如下:

char *labels[100];

labels[0] = "hi";
labels[1] = "bye";
labels[2] = "arbitrary-length string literal";
....

这比处理2d数组,strcpy()等更简单。

此外,strcpy()通常被视为unsafe

答案 2 :(得分:0)

如果你需要将标签+地址保存在一个7字符串中,那么最简单的方法是:

#define MAX_LABELS 100
char labels[MAX_LABELS][7];

// do something with the array
for (int i=0; i<MAX_LABELS; i++) {
   strcpy(labels[i], "label");  // watch for buffer overflow here
   labels[i][6] = (char)i;
}

或者,如果标签和地址在同一个字符串中无关紧要,请使用结构数组使代码更具可读性:

struct LabelStruct {
    char label[6];
    char address[1];
} labels[MAX_LABELS];

// do something with the array
for (int i=0; i<MAX_LABELS; i++) {
    strcpy(labels[i].label, "label");  // watch for buffer overflow here
    labels[i].address = (char)i;
}

您没有说明是否需要以null结尾的标签,但如果是这样,请在标签数组中再添加一个字符。另外,在为标签分配数据时,请检查溢出(使用strncpy或类似情况)。