我有以下代碼,我正在讀取文件中的行並希望使用字符指針數組保存它們。由於我在文件讀取循環中使用了一個緩衝區,因此字符數組中的所有指針最終都指向從文件讀取的最後一行,因爲最後一行是循環終止時當前保存在緩衝區中的一行。我如何存儲它們,以便字符數組中的每個指針按照它們讀取的順序指向不同的char數組。使用字符指針數組來存儲多個char數組
int num_clients_to_start = 0;
char *token1, *token2, *str;
FILE* fp;
char bufr[256];
char testchar[255] = {};
char *start_client[10];
while(fgets(bufr, 256, fp) != NULL){
if(bufr[0] == '#'|| bufr[0] == '\n')
continue;
str = bufr;
token2 = ""; /* initializing an empty token 2 */
for(str = bufr; ;str = NULL){
token1 = strtok(str, " ");
if(strcmp(token2, "client_name") == 0){
sprintf(testchar,"%s", token1);
start_client[num_clients_to_start] = testchar;
num_clients_to_start++;
}
token2 = token1;
if(str == NULL){
break;
}
}//end of for loop
}//end of while loop
printf("client1 = %s client2 = %s client3 = %s",start_client[0],start_client[1],start_client[2]);
我的輸入文件如下:
client_name abc
client_name def
client_name xyz
和打印語句輸出:
client1 = xyz
client2 = xyz
client3 = xyz
對不起,我想我一定是錯過了分配,同時複製到TOKEN1我的代碼。編輯 –
是的,這樣的話,「testchar」的指針是相同的,因此最後所有的打印語句都打印相同的東西。那就是我想知道的,如何避免這種情況? –
@ZahaibAkhtar是的。要麼是使用'strdup'(但是當你完成這些指令時,你必須記得「釋放」指針)。 –