当我在数组中输入元素的值时,在for循环中,在for循环之后然后转换

时间:2014-11-02 18:13:14

标签: c arrays

当我在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".

1 个答案:

答案 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]);