【解決方法】すべてのファイルの内容を cpp の char ポインターに格納します

プログラミングQA


こんにちはチーム、

ここに私の簡単なコードを貼り付けます。私がやろうとしているのは、ファイルのすべての内容を char ポインターにコピーして後でアクセスすることです。 しかし、どこが間違っているのか。 親切なアドバイス。 ティア。

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

int main()
{
        FILE *fp;
        char buf[500];
        char *result = new char[500];
        fp=fopen("test.txt","r");
        if(fp==NULL)
        {
                printf("\nfile opening error");
                return -1;
        }
        memset(buf,0,sizeof(buf));
         char *buffer= (char*)malloc(500);
        while(fgets(buffer,500,fp)!=NULL)
        {
                printf("\nstrlen of buf %d",strlen(buffer));
                memcpy(result,buffer,sizeof(buffer));
                
                printf("\ncopied [%s] length= %d",result,strlen(result));
                result+=strlen(result);
                printf("\nwhile result = %s",result);
                
        }
        printf("\n outmsg= %s\n",result);
        return 0;
}
I am getting null values in result.

私が試したこと:

C++ Linux は、後でアクセスするためにファイルの内容を char ポインターに格納しようとします。

解決策 1

まず、使わない buf まったく-だからそれを捨ててください。
2番、 strlen 最初のヌル文字の前にある文字数を返します。ファイルの内容によっては、出力されるデータは何でもかまいませんが、最初のヌル文字まで出力してからnull と … それを印刷しようとします。

fgets 行末に達したときにのみヌルを挿入します-それ以降のデータでは何もしません-したがって、2番目と最後に期待することはまったくありません printfresult あなたに示すことは誰の推測でもあります。

そして…呼び出し sizeof on any pointer は、それが指すメモリ ブロックではなく、そのポインタのサイズを返します。32 ビット システムの場合は 4、64 ビット システムの場合は 8 です。

そのコードは、キーボードにジャンプする前に実際の計画なしに書かれたように見えるため、正確に何をしようとしているのかを考えてください – そしてそれは常に間違いです! 😀

コメント

タイトルとURLをコピーしました