如何将指针中的值保存到char数组中?

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

{0 /Data1/ , 0x00, 0, 0xFF}, {1 /data2/ , 0x00, 0, 0xFF}, {2 /data3/ , 0x00, 0, 0xFF}, {3 /data4/ , 0x00, 0, 0xFF}, ... 

我想只打印每行的第二列。 以下是我工作的代码。

 #include #include 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); 

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

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

如果你想要存储所有第二列你需要分配一个动态指针数组(char *),然后到每个单词/列分配空间到单词并用strcpy复制,因为word1在每次迭代时都会改变,所以你可以只保存戒备。

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

尝试这样的事情:

 #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 ,控制它的大小,内存重新分配和值存储。