如何将指针指向的textf的内容复制到char数组(即指针 - > char数组)

时间:2014-05-07 19:46:07

标签: 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 = (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/;虽然不明白(它甚至是相关的吗?)

1 个答案:

答案 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本身的值。但是,如果您选择此方法,则必须在结构中维护buffers