我正在读取一个文件,感谢malloc将文本文件的内容保存到* buffer。但是,我希望将文件的内容传输到char数组。我怎么能做到这一点?
到目前为止,这是我的代码:
#define LENGTH_OF_INPUT 49
FILE *FP = fopen("InputString.txt", "r");
char *buffer;
char InputString;
fseek(FP, 0L, SEEK_END);
s = ftell(FP);
rewind(FP);
buffer = (char*) malloc(s); /* buffer now is the content of the file */
if (buffer != NULL) /* If buffer was allocated... i.e the file exists*/
{
fread(buffer, s, 1, FP);
fclose(FP); /* Must.. Close.. File.. */
FP = NULL; /* For decaying pointer?? */
for (sizeofbuffer = 0; *buffer != '\0'; ++sizeofbuffer)
{
*buffer++;
}
if (sizeofbuffer == LENGTH_OF_INPUT - 1 ) /* Check if the length of the string = 48 */
{
/* Correct length! */
/* Also need to reset *buffer so that this for loop copies from the first letter */
for (i = 0; *buffer != '\0' ; ++sizeofbuffer) /* Save to InputString*/
{
/* CODE NEEDS TO GO HERE!! */
}
}
我不想在char数组包含早期'\ 0'
的情况下使用strcpy 编辑:我发现了http://www.cplusplus.com/forum/general/4107/;虽然不明白(它甚至是相关的吗?)答案 0 :(得分:1)
改变这个:
buffer = (char*)malloc(s);
对此:
buffer = (char*)malloc(s+1);
buffer[s] = 0;
关闭文件后返回buffer
;其余的代码是多余的。除此之外,请不要忘记free
buffer
在程序执行后的某个时间点指向的内存。
buffer[s] = 0
的目的是让您能够将其传递给 string 函数。几个例子:
printf("%s",buffer);
strcpy(buffer2,buffer);
strcat(buffer2,buffer);
if (strcmp(buffer2,buffer) == 0) ...
即使您对此不感兴趣,您仍然需要一种方法,您可以使用该方法检测存储在buffer
指向的内存中的字符串的结尾。上面的答案提出了将buffer[s]
设置为0(null)字符的方法。或者,您可以简单地使用s
本身的值。但是,如果您选择此方法,则必须在结构中维护buffer
和s
。