将 char 数组的值复制到二维数组
Copy value of char array to 2D array
正如您在下面看到的,我创建了一个二维字符串数组。我还使用了一个名为 "buffer" 的字符数组。我想将缓冲区的值复制到二维数组的 [5][0] 位置。
问题在于,当缓冲区的值发生变化时,数组单元格的值也会发生变化。
我想保留第一个值。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * strNameList[10][2] = {
{"Luca", "Daniel"} ,
{"Vivan", "Desmond"},
{"Abdul", "Justin"},
{"Nina", "Marlene"},
{"Donny", "Kathlene"}
};
int main()
{
int j, i;
int pos = 5;
char buffer[10204];
strcpy(buffer, "A Value");
strNameList[pos][0] = buffer;
strNameList[pos][1] = "Surname";
for (i = 0; i < 9; i++) {
printf("\n");
for (j = 0; j < 2; j++)
printf(" %s", strNameList[i][j]);
}
strcpy(buffer, "B Value");
for (i = 0; i < 9; i++) {
printf("\n");
for (j = 0; j < 2; j++)
printf(" %s", strNameList[i][j]);
}
}
输出:
Luca Daniel
Vivan Desmond
Abdul Justin
Nina Marlene
Donny Kathlene
A Value Surname
Luca Daniel
Vivan Desmond
Abdul Justin
Nina Marlene
Donny Kathlene
B Value Surname
问题是 strNameList[pos][0]
指向 到 buffer
并且它不是一个独立的存储位置,因为它只是一个指针,您可以使用任一方法修改它buffer
或 strNameList[pos][0]
因为两者都指向内存中的同一个位置。
不要在同一字符串数组中混合指向字符串文字的指针和指向非常量数组的指针,而是使用
strNameList[pos][0] = strdup(buffer);
你会看到区别,同样
strNameList[pos][1] = strdup("Surname");
你需要一个
free(strNameList[pos][0]);
free(strNameList[pos][1]);
稍后,当您不再需要指针时。
正如您在下面看到的,我创建了一个二维字符串数组。我还使用了一个名为 "buffer" 的字符数组。我想将缓冲区的值复制到二维数组的 [5][0] 位置。 问题在于,当缓冲区的值发生变化时,数组单元格的值也会发生变化。 我想保留第一个值。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * strNameList[10][2] = {
{"Luca", "Daniel"} ,
{"Vivan", "Desmond"},
{"Abdul", "Justin"},
{"Nina", "Marlene"},
{"Donny", "Kathlene"}
};
int main()
{
int j, i;
int pos = 5;
char buffer[10204];
strcpy(buffer, "A Value");
strNameList[pos][0] = buffer;
strNameList[pos][1] = "Surname";
for (i = 0; i < 9; i++) {
printf("\n");
for (j = 0; j < 2; j++)
printf(" %s", strNameList[i][j]);
}
strcpy(buffer, "B Value");
for (i = 0; i < 9; i++) {
printf("\n");
for (j = 0; j < 2; j++)
printf(" %s", strNameList[i][j]);
}
}
输出:
Luca Daniel
Vivan Desmond
Abdul Justin
Nina Marlene
Donny Kathlene
A Value Surname
Luca Daniel
Vivan Desmond
Abdul Justin
Nina Marlene
Donny Kathlene
B Value Surname
问题是 strNameList[pos][0]
指向 到 buffer
并且它不是一个独立的存储位置,因为它只是一个指针,您可以使用任一方法修改它buffer
或 strNameList[pos][0]
因为两者都指向内存中的同一个位置。
不要在同一字符串数组中混合指向字符串文字的指针和指向非常量数组的指针,而是使用
strNameList[pos][0] = strdup(buffer);
你会看到区别,同样
strNameList[pos][1] = strdup("Surname");
你需要一个
free(strNameList[pos][0]);
free(strNameList[pos][1]);
稍后,当您不再需要指针时。