1

我有以下代码,我正在从文件中读取行并希望使用字符指针数组保存它们。当我在文件读取循环中使用一个缓冲区时,我在字符数组中的所有指针最终都指向从文件读取的最后一行,因为最后一行是循环终止时当前保存在缓冲区中的那一行。如何存储它们,以便字符数组中的每个指针按照读取顺序指向不同的字符数组。

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
4

2 回答 2

3

注意 , start_client[0],[1]都是[2]指向最后一个字符串的指针(由 读取fgets

使用strdup来分配它们:

start_client[num_clients_to_start] = strdup(testchar);

作为strdup外部标识符,使用原型

#include <string.h>

char *strdup(const char *s); 

最后别忘free()

于 2013-10-21T06:08:06.887 回答
1

您将相同的指针分配给start_client数组中的所有条目。该数组testchar将获得不同的内容,但指向它的指针将始终相同。您可能想要创建start_client一个数组数组char,然后复制字符串。

喜欢

char start_client[10][256];

strcpy(start_client[num_clients_to_start++], token1);
于 2013-10-21T06:04:44.987 回答