我正在考虑将字符串复制到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
循环中,所以我可能会有十个副本,我不知道这是否会正确复制到第一个每次都是专栏。
答案 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
或类似情况)。