web-dev-qa-db-ja.com

Cで文字を文字列に変換

Cで文字を文字列に変換するにはどうすればよいですか。現在、文字を返すc = fgetc(fp)を使用しています。しかし、strcpyで使用する文字列が必要です

17
user1911575

他に読みすぎずに質問に答えるには

char str[2] = "\0"; /* gives {\0, \0} */
str[0] = fgetc(fp);

文字列としてcharを使用し続ける他の文字列操作でループの2行目を使用できます。

9
Adam

fgetc(fp)を使用してstrcpy(buffer,c);を呼び出すことだけが正しくないと思われます。

このバッファを自分で簡単に構築できます。

char buffer[MAX_SIZE_OF_MY_BUFFER];

int i = 0;
char ch;
while (i < MAX_SIZE_OF_MY_BUFFER - 1 && (ch = fgetc(fp)) != EOF) {
    buffer[i++] = ch;
}
buffer[i] = '\0';  // terminating character

これは、MAX_SIZE_OF_MY_BUFFER文字よりも少ない文字を読むという事実に依存していることに注意してください。

5
LihO

与えられた答えの多くを実行できますが、strcpyで使用できるようにしたい場合は、以下を実行できます。

...
    strcpy( ... , (char[2]) { (char) c, '\0' } );
...

(char[2]) { (char) c, '\0' } partは、文字cから一時的にnullで終わる文字列を生成します。

この方法では、1文字の文字列が1回だけ必要であれば、既に手元にあるものに対して新しい変数を作成することを避けることができます。

3
ThoAppelsin

これを使用してcharを文字列に変換します(例)。

char c = 'A';
char str1[2] = {c , '\0'};
char str2[5] = "";
strcpy(str2,str1);
2
Ħđ Ťǿųfik

そのようなコードは動作するはずです:

int i = 0;
char string[256], c;
while(i < 256 - 1 && (c = fgetc(fp) != EOF)) //Keep space for the final \0
{
    string[i++] = c;
}
string[i] = '\0';
2
Taiki

動作する例は次のとおりです。

printf("-%s-", (char[2]){'A', 0});

これにより、-A-

1
John
//example
char character;//to be scanned
char merge[2];// this is just temporary array to merge with      
merge[0] = character;
merge[1] = '\0';
//now you have changed it into a string
1
Omar Said

これは古い質問ですが、OPの質問に実際に当てはまる答えはありません。彼がしたい/必要なのはこれだけです:

_char c = std::fgetc(fp);
std::strcpy(buffer, &c);
_

ここで関連する側面は、という事実です。 strcpy() char配列/ c-stringである必要はありません。実際、どの引数もcharまたはchar配列ではありません。これらは両方ともcharポインターです。

_strcpy(char* dest, const char* src);
_
_dest :_ 非const charポインター
その値は、書き込み可能なchar配列の要素のメモリアドレスである必要があります(その後に少なくとも1つの要素が追加されます)。
_src :_ const charポインター
その値は、単一の文字、またはchar配列の要素のアドレスです。その配列には特殊文字が含まれている必要があります _\0_ 残りの要素内(で始まる src)、コピーする必要のあるc-stringの終わりをマークします。

1
Floriel

参考までに、Cにはstringデータ型がありません。文字の配列を使用して値を保存し、操作します。変数cを文字の配列に変更し、ループ内で使用して値を取得します。

char c[10];
int i=0;
while(i!=10)
{
    c[i]=fgetc(fp);
    i++;
}

もう1つの方法は、ポインターを使用してメモリを動的に割り当て、値を割り当てることです。