我试图将char数组字复制到char指针s[1].c
,然后将另一个字复制到char指针s[2].c
但是当我试图这样做时,第二个字似乎在所有两个指针中都被复制了。我该如何解决这个问题?我不想使用字符串。
struct Stud {
char *c;
} s[100];
char word[32];
int main()
{
strcpy(word,"one");
s[1].c=word;
word={0};
strcpy(word,"two");
s[2].c=word;
cout<<s[1].c<<" "<<s[2].c;
return 0;
}
答案 0 :(得分:0)
在您的代码中设置s[1].c = word;
,这意味着您将s [1] .c设置为单词的地址。然后设置s[2].c = word;
,这是完全相同的内存位置。 (对于c字符串,(char *)s1 = (char *)2
不会像您期望的那样执行字符串复制。它只是将一个指针指向另一个。)
使用strdup
分配新的内存块,然后将字符串复制到分配的空间中。
此处修改了您的代码。
struct Stud
{
char *c;
} s[100];
int main()
{
char word[32];
strcpy(word, "one");
s[0].c = strdup(word); // In C/C++ the first array index is 0
strcpy(word, "two");
s[1].c = strdup(word);
// Should check to make sure s[0].c and s[1].c are not NULL....
cout << s[0].c << " " <<s [1].c;
free(s[0].c);
free(s[1].c);
return 0;
}