コマンドラインからargvを使用してchar入力を受け入れるプログラムがあります。strcpy を使用して入力 argv[1] を、メモリが割り当てられている structptr というポインタ (構造体から structptr->words に移動) にコピーします。次に、ポインタ structptr が指すメモリから、割り当てられたメモリを指す words と呼ばれる別のポインタを 1 文字ずつコピーします。1文字をコピーした後、その要素[c]を印刷して、正しくコピーされたことを確認します(これはあります)。次に、すべての文字のコピーを終了し、結果を char ポインターに返しますが、何らかの理由で空白/null です。文字をコピーするたびに、前の要素が正しいかどうかを確認しましたが、それらはもう表示されません([c-2]、[c-1]、[c])。これが私のコードです:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct StructHolder {
char *words;
};
typedef struct StructHolder Holder;
char *GetCharacters(Holder *ptr){
int i=0;
char *words=malloc(sizeof(char));
for(i;i<strlen(ptr->words);i++){
words[i]=ptr->words[i];
words=realloc(words,sizeof(char)+i);
}
words[strlen(ptr->words)]='\0';
return words;
}
int main(int argc, char **argv){
Holder *structptr=malloc(sizeof(Holder));
structptr->words=malloc(strlen(argv[1]));
strcpy(structptr->words, argv[1]);
char *charptr;
charptr=(GetCharacters(structptr));
printf("%s\n", charptr);
return 0;