0

私がやりたいことは、空白を間に挟んだ4つの整数の文字列を作成することです。Javaのように:

String res = num1 + " " + num2 + " " + num3 + " " + num4;

しかし、Cでそれを行う方法がわかりません。

int numWords = 0;
int numLines = 0;
int numChars = 0;
int numBytes = strlen(string);
char *result = malloc(sizeof(char) * 10);
result += numWords; //doesnt work is there somekind of function in c to do this?
4

3 に答える 3

4

を使用sprintfして、各数値を文字列に変換できます(またstrcat、必要に応じて次々に配置できます)。文字列がオーバーフローしないように、文字列の長さを追跡する必要があります。

例えば:

int var = 10;
char buf[20];
sprintf(buf, "%d", var);  // buf string now holds the text 10

フォーマットと数値の量が設定されている場合は、これよりもはるかに複雑にする必要はありません。したがって、4つの数値の間に常に1つのスペースが必要な場合は、1つと次sprintfのようなフォーマット文字列を使用してすべてを行うことができます"%d %d %d %d"(ただし、これにははるかに大きな文字配列が必要になります)。


次のような既存の文字列に追加する小さなユーティリティ関数を作成するのは簡単です。

int add_to_string(char *buf, size_t sz, int num)
{
   char tmp[20];
   sprintf(tmp, " %d", num);

   size_t len = strlen(tmp) + strlen(buf) + 1; 
   if (len > sz)
      return -1;

   strcat(buf, tmp);
   return 0;
}

これは、次のようなもので呼び出します。

char buf[100];
sprintf(buf, "%d", 42);
add_to_string(buf, sizeof(buf), 9);
add_to_string(buf, sizeof(buf), 15);
add_to_string(buf, sizeof(buf), 8492);
add_to_string(buf, sizeof(buf), 35);
printf("String is '%s'\n", buf);

Output:
String is '42 9 15 8492 35'
于 2013-03-13T17:39:42.400 に答える
1
#define FMT_STR "%d %d %d %d"

char *make_string(int num1, int num2, int num3, int num4)
{
    char *res;
    int len;

    // compute the length
    len = snprintf(NULL, 0, FMT_STR, num1, num2, num3, num4) + 1;
    // allocate and use the buffer
    res = malloc(len);
    snprintf(res, len, FMT_STR, num1, num2, num3, num4);

    return res;
}
于 2013-03-13T17:45:07.430 に答える
1

使用sprintf:

char target[SOME_SIZE];
...
sprintf(target, "%d %d %d %d", num1, num2, num3, num4);

ターゲットが、4 つの数字すべて、3 つのスペース、任意の記号、および 0 ターミネータの文字列表現を収容するのに十分な大きさであることを確認する必要があります。10 進数を表すには 3.3 ビットかかるため、32 ビットでintは最大 10 桁まで使用できます。

ターゲット バッファを動的に割り当てたい場合は、次のようにします。

size_t maxdigits = (size_t) ceil((sizeof num1 * CHAR_BIT) / 3.3);
char *target = malloc( sizeof *target * ((4 * maxdigits) + 3 + 4 + 1)); 

スペースの場合は +3、任意の記号文字 ( +/ -) の場合は +4、0 ターミネータの場合は +1。

于 2013-03-13T17:55:40.993 に答える