1

我有一个包含这样数据的文件

{0 /Data1/ , 0x00, 0, 0xFF},

{1 /data2/ , 0x00, 0, 0xFF},

{2 /data3/ , 0x00, 0, 0xFF},

{3 /data4/ , 0x00, 0, 0xFF}, ...

我只想打印每行的第二列。下面是我处理的代码。

#include<stdio.h>
#include<string.h>
int main ()
{
char filename[] = "file.txt";
FILE *file = fopen(filename, "r");
if(file!= NULL)
{
char line[128];
char * word1;
char  word2;
char  word3;
int i=0;
clrscr();
while ( fgets( line, sizeof line, file)!= NULL)
{
i=0;
word1 = strtok(line, " ,");

while(word1!= NULL)
{
i++;
if(i==2 ){

printf("%s\n",word1);
}
word1 = strtok(NULL," ,");
}

}
fclose(file);
}
else
{
perror(filename);
}


getch();

return 0;
}

它工作正常。我可以将每行中打印的值保存到数组中吗?我尝试过这样的事情

if(i==2){
word2 = * (word1);
} 
printf("%s\n",word1);

但它给了我一个空指针赋值。如何将我打印的值存储到数组中?

4

3 回答 3

1

您只将字符串 word1 的第一个字符保存到 word2 中。

如果要存储所有第二列,则需要分配指向 (char *) 的动态指针数组,然后分配给每个单词/列的空间分配给单词并使用 strcpy 进行复制,因为 word1 在 while 的每次迭代中都会发生变化,因此您可以不要只保存参考。

于 2012-04-16T20:42:00.930 回答
0

您可以使用动态分配的数组,随着您需要更多空间而增加。请参阅为什么即使在 C 中分配给大型可变长度数组也具有固定值 -1?寻求更多帮助。

于 2012-04-16T20:08:46.323 回答
0

尝试这样的事情:

#define MAX_BUFFER_SIZE 256
/* ... */

char ** lines = malloc(MAX_BUFFER_SIZE + 1);
char ** p = lines;
char ** newbuf;
int len;
int bytesloaded = 0;  
int buf_size = MAX_BUFFER_SIZE;  
assert(lines != NULL);
//... loop etc.. 

if(i==2 ){
   len = strlen(word1);
   bytesloaded += len;

   if(bytesloaded >= buf_size) /* Controls buffer size. For avoid buffer overflow/heap corruption/UB. */
   {
      buf_size += MAX_BUFFER_SIZE;
      newbuf = realloc(lines, buf_size);

      if(!newbuf)  /* return or break. */ 
      {  
        printf("Allocation failed.\n");
        free(lines);
        return 1;
      }

       lines = newbuf;
    }

    *p++ = word1; /* store the word in lines */
    printf("%s\n",word1);
}

注意:不要忘记\0在第一个循环结束后将 0 终止符 , 放入数组中。

我没有测试过这段代码,但我相信它可以工作。

这是一个简单的例子:a dynamic memory allocation控制它的大小,内存重新分配和值存储。

于 2012-04-17T00:47:50.893 回答