如何将指针指向的textf的内容复制到char数组(即指针->;char数组)
我正在读取一个文件,由于malloc,它将文本文件的内容保存到*buffer。但是,我希望将文件的内容传输到char数组。我怎样才能做到这一点 以下是我目前的代码:如何将指针指向的textf的内容复制到char数组(即指针->;char数组),c,arrays,pointers,char,C,Arrays,Pointers,Char,我正在读取一个文件,由于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 = (c
#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
编辑:我找到了这个;但我不明白(它是否相关?更改此项:
buffer = (char*)malloc(s);
为此:
buffer = (char*)malloc(s+1);
buffer[s] = 0;
关闭文件后返回buffer
;代码的其余部分是多余的。除此之外,不要忘记在程序执行过程中的稍后某个点释放缓冲区所指向的内存
buffer[s]=0
的目的是让您能够将其传递给字符串函数。举几个例子:
printf("%s",buffer);
strcpy(buffer2,buffer);
strcat(buffer2,buffer);
if (strcmp(buffer2,buffer) == 0) ...
即使您对此不感兴趣,您仍然需要一种方法来检测字符串的结尾,该字符串存储在缓冲区所指向的内存中。上面的答案建议将缓冲区设置为0(空)字符。或者,您可以简单地使用s
本身的值。但是,如果选择此方法,则必须在结构中同时维护buffer
和s
。抱歉,由于某些原因,代码不会提交。我看到了您的编辑,并删除了我的注释。我可能犯了一个愚蠢的错误,但您不使用字符指针访问字符数组吗?你不能去*InputString++=*buffer++代码>,就像他们在你的链接上做的那样?这是我实际上有点困惑的事情。为什么是指针符号?打印时,会给我垃圾数据吗?@barakmanos根据请求添加了代码。你能让我看看缓冲区[s]=0的重要性吗?谢谢你的帮助!神圣的绿色的批准记号将很快授予你。解释得也很好