我想将文件的所有内容一次性,并将其放在"大字符串" 中。 我不想一行一行。有什么功能吗?
我想要这样的事情:
int main(int argc, char *argv[]) {
FILE *script;
int i;
char *code;
if (argc > 1){
for (i = 1; i < argc; i++){
if ((script = fopen(argv[i], "r")) == NULL){
perror(argv[i]);
}else {
code = malloc (sizeof(char)*sizeof(script));
**HERE TAKE THE CONTENT AND PUT IN "CODE" IN ONE GO**
}
}
}
printf("%s",code);
fclose(script);
free(codigo);
exit(0);
}
那可能吗?
答案 0 :(得分:1)
是。阅读ftell
或stat
,了解如何获取文件大小以了解需要分配多少空间(不能在sizeof
上使用FILE *
获取该信息,它不会按照您的想法执行),并fread
一次性阅读。
使用stat()获取大小的示例代码:
#include <sys/stat.h>
off_t fsize(const char *fname) {
struct stat st;
if (stat(fname, &st) == 0)
return st.st_size;
return -1;
}
答案 1 :(得分:1)
你也可以考虑使用
fseek(script, 0, SEEK_END); // position to the end of the file
size = ftell(script); // get the file size
fseek(script, 0, SEEK_SET); // rewind to the beginning of the file
code = malloc(sizeof(char)*(size+1));
if(code) {
fread(code, sizeof(char), size, script);
code[size] = '\0';
}
进行一些额外的错误检查