13

charから与えられた がありfgets、それを に変換する方法を知りたいchar*です。

これは以前に投稿されたことがあると確信していますが、私がやりたいことを完全に行っているものを見つけることができませんでした. どんな答えでも大歓迎です。

編集:これがコードです。

char *filename = "file.txt";
FILE *file = fopen(filename, "r");
if(file != NULL) {
  char line[260];
  char *fl;
  while(fgets(line, sizeof line, file) != NULL) {
    // here I combine some strings with the 'line' variable.
    str_replace(line, "\"", "\"\""); // A custom function, but it only takes char*'s.
  }
  printf(fl);
  printf("\n");
} else {
  printf(" -- *ERROR* Couldn't open file.\n");
}
4

2 に答える 2

30

まず第一に、lineは s の配列でありchar、a とほぼ同じ方法で操作できるため(重要な違いについてはcomp.lang.c の FAQchar *を参照してください)、心配する必要はありません。

ただし、一般的な質問への回答が必要な場合は...

&演算子はあなたが必要とするものです:

char c;
char *pChar = &c;

ただし、pChar は char へのポインターであり、c がスコープ内にある間のみ有効であることに注意してください。つまり、関数から pChar を返して、それが機能することを期待することはできません。ヒープの一部を指すことになり、それが有効であるとは期待できません。

戻り値として渡したい場合は、いくつかのメモリを malloc し、ポインターを使用して c の値を書き込む必要があります。

char c;
char *pChar = malloc(sizeof(char));

/* check pChar is not null */

*pChar = c;
于 2012-06-29T20:11:02.033 に答える
8

&Dancrumbが述べたように、演算子を使用すると文字へのポインタが得られますが、彼が述べたように、スコープの問題があり、ポインタを返すことができません。

追加しなければならないことの 1 つは、 が必要な理由は、それを文字列または同様char*のものとして使用できるようにするためであると想像することです。printf文字列が終了しないため、この方法では使用できませんNULL。a を文字列に変換するcharには、次のようにする必要があります

char c = 'a';
char *ptr = malloc(2*sizeof(char));
ptr[0] = c;
ptr[1] = '\0';

後で解放することを忘れないでくださいptr

于 2012-06-29T20:18:03.803 に答える