1

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

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

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

strcopy(labels[1],"hi")

我对此很好奇,因为这strcpy是一个for循环,所以我可能会有多达十个副本,我不知道这是否会每次都正确复制到第一列。

4

3 回答 3

0

要处理二维数组的列,您可以这样做;

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

for (p = &labels[i]; p < &labels[100]; P++)
    (*P)[i] = //assign a char
于 2013-09-20T15:20:00.053 回答
0

我很好奇你的陈述“你不能简单地分配一个字符串”。这是真的,但您可以将指针分配给字符串文字。为什么不简化如下:

char *labels[100];

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

这比处理二维数组、strcpy() 等要简单得多。

此外, strcpy() 通常被认为是不安全的。

于 2013-09-20T16:10:12.347 回答
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;
}

您没有说是否需要以空值结尾的标签,但如果需要,请在标签数组中再添加一个字符。此外,在将数据分配给标签时,检查溢出(使用strncpy或类似)。

于 2013-09-20T16:37:41.213 回答