2012-04-16 124 views
1

我有这样如何将指针中的值保存到char数组中?

{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); 

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

+0

是否允许使用'std :: vector'而不是数组?代码是C,但问题标记为C++。 – hmjd 2012-04-16 19:56:08

+0

相关:http://stackoverflow.com/questions/10179622/how-to-read-second-and-last-words-from-each-line-in-c - 是你编码的C或C++吗? – Mat 2012-04-16 19:57:44

+0

我的代码在C中。在我甚至分手之前,我发布了相关的问题。现在我只想将每行的指向值保存到数组中以备后用。 – user1336997 2012-04-16 20:00:26

回答

0

您可以使用动态分配的数组,您需要更多的空间才能使用该数组。 有关更多帮助,请参阅Why does a large variable length array has a fixed value -1 even if assigned to in C?

+1

我有问题将char *转换为char。我可以让word2成为一个数组并保存所有的值,但是问题是如果(i == 2){word2 = *(word1); } printf(“%s \ n”,word1);给我一个空指针分配。分割错误。程序异常终止。如何将word1中的值存储到word2中,这是一个char? – user1336997 2012-04-16 20:16:00

+0

好吧,一个字符串是一个字符数组。当你解析“0x00”时,你得到一个数组为'{'0','x','0','0','\ 0'}'。至于复制word1到word2,你可以用'strlen'获得数组的长度'n',然后使用'n + 1'的字节大小的'memcpy'。我认为你应该做一个关于指针和动态内存的教程来获得一个好的开始。 – 2012-04-16 20:41:34

1

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

如果你想要存储所有的第二列,你需要分配一个指向动态数组的指针(char *),然后给每个单词/列分配空间到单词并复制一个strcpy,因为word1在每次迭代尽管如此,你不能仅存储这些信息。

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

相关问题