当我在baza[nlines]
循环中打印for
时,结果(" outprint")是正确的,它会打印我输入的内容。但当我检查" outprint"在for
循环之后,它以某种方式进行转换,baza[]
的两个元素都相同。示例:我输入了number_loops
2,baza[0]
" grass"以及baza[1]
"啤酒",所以我在for
" {1}}循环,baza[0]
以某种方式变得相同,就像baza[1]
一样,并且它已经打印了#34;啤酒"。
int number_loops = 2;
char *baza[SIZE];
char baza_pojedinac[100];
char p[1000];
int nlines = 0;
for ( ;number_loops-- > 0 ; )
{
getline(baza_pojedinac);
baza_pojedinac[strlen(baza_pojedinac)-1] = '\0';
strcpy(p, baza_pojedinac);
baza[nlines] = p;
printf("baza: %s\n",baza[nlines]);
nlines++;
}
printf("first: %s\n",baza[0]); // result == "beer".
printf("second: %s\n",baza[1]); // result == "beer".
答案 0 :(得分:3)
在for
循环后,baza[0]
和baza[1]
都指向相同的字符串p[]
,因此它们必须是相同的。如果您执行baza[nlines] = p;
,则无法复制字符串,只表示baza[nlines]
现在指向p
。
有几种方法可以解决这个问题,但最简单的方法是将baza
设为2D数组并将字符串复制到其中:
char baza[10][SIZE]; //Increase if needing more than 10 lines
char baza_pojedinac[100];
int nlines = 0;
for ( ;number_loops-- > 0 ; )
{
getline(baza_pojedinac);
strcpy(baza[nlines], baza_pojedinac);
printf("baza: %s\n",baza[nlines]);
nlines++;
}
printf("first: %s\n",baza[0]);
printf("second: %s\n",baza[1]);
修改强> 如果您想分配字符串,则可以执行以下操作:
char* baza[SIZE];
char baza_pojedinac[100];
int nlines = 0;
for ( ;number_loops-- > 0 ; )
{
getline(baza_pojedinac);
baza[nlines] = malloc(100);
strcpy(baza[nlines], baza_pojedinac);
printf("baza: %s\n", baza[nlines]);
nlines++;
}
printf("first: %s\n",baza[0]);
printf("second: %s\n",baza[1]);
...
free(baza[0]); // Don't forget to free the memory eventually
free(baza[1]);