指向一串未知长度的指针数组

时间:2017-10-29 05:55:20

标签: c

我有一个.csv文件的字段要读取为整数,字符串,整数。我不知道字符串的大小,它们可能会因csv中的不同条目而异。例如:

log.error("AccessToken: " + securityContext.getTokenString());
log.error("User: {} / {}", accessToken.getPreferredUsername(), accessToken.getName());
log.error("Principal: {}", principal.getName());

这里1,Hello,10 2,hi,20 Hello的长度不同,那么如何使用malloc从文件中读取时动态分配字符串的大小?

任何人都可以帮助我使用它的语法,从声明开始直到使用malloc来分配大小。

我的输出应该是这样的,它是从.csvfile读取整数,字符串,整数并显示文件中的所有字符串。

文件中的条目数量可以达到数千万。

2 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题。一般的想法是设置缓冲区的最大存储量。如果你不知道,你会做什么?

我可以告诉你一个简单的想法,你用一些BUFFERSIZE创建一个缓冲区。现在,当逐个字符地阅读时,您将知道何时90%的缓冲区已满。当发生这种情况时,你需要重新分配并加倍内存。这样你就会有足够的记忆力。

另一种方法是逐个处理。而是存储整个大块然后处理它,分割它并完成工作,然后读取下一个块。这样你就不会立刻使用太多的内存。

大多数大型数据处理C库遵循此处所述的类似想法。

答案 1 :(得分:0)

使用strtok()和strlen()的组合。

首先,请记住,您不需要为令牌分配内存,正如您可以在tutorialspoint的下一个示例中看到的那样:

https://www.tutorialspoint.com/c_standard_library/c_function_strtok.htm

#include <string.h>
#include <stdio.h>

int main () {
   char str[80] = "This is - www.tutorialspoint.com - website";
   const char s[2] = "-";
   char *token;

   /* get the first token */
   token = strtok(str, s);

   /* walk through other tokens */
   while( token != NULL ) {
      printf( " %s\n", token );

      token = strtok(NULL, s);
   }

   return(0);
}

考虑到这一点,如果您仍然希望以前只使用malloc将字符串复制到另一个字符串:

char *field;

// some code

field = malloc(strlen(token) + 1);
strcpy(field, token);

// do something

free(field)