1

関数に送信と整数が必要で、それを定数文字の末尾に追加します。

int main (void)
{
    append(1);
}

int append(int input)
{
    const char P = 'P';

    //This where I want to append 1 to P to create "P1"'
}
4

6 に答える 6

5

何をするにしても、数値を文字列に変換する必要があります。そうしないと、両方の数値を含む文字列を作成できません。

実際には、連結と int から文字列への変換の両方を 1 つの関数呼び出しで組み合わせることができます: sprintf:

char output[16];
sprintf(output, "P%d", input);
于 2012-10-12T16:42:48.027 に答える
0

数値を文字列に変換します(この例で呼び出される関数にアクセスできると仮定して、itoaそれを文字に連結します。アクセスできないitoa場合は、代わりに変換できsprintfます。

itoaメソッド:

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

char *foo(const char ch, const int i)
{
    char *num, *ret;
    int c = i;

    if(c <= 0) c++;
    if(c == 0) c++;
    while(c != 0)
    {
        c++;
        c /= 10;
    }
    c += 1;
    if(!(num = malloc(c)))
    {
        fputs("Memory allocation failed.", stderr);
        exit(1);
    }
    if(!(ret = malloc(c + 1)))
    {
        fputs("Memory allocation failed.", stderr);
        free(num);
        exit(1);
    } 
    itoa(i, num, 10);
    ret[0] = ch;
    ret[1] = 0x00;
    strcat(ret, num);
    free(num);
    return ret;
}

int main(void)
{
    char *result;

    if(!(result = foo('C', 20))) exit(1);
    puts(result);
    free(result);
    return 0;
 }

sprintfメソッド:

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

char *foo(const char ch, const int i)
{
    char *num, *ret;
    int c = i;

    if(c <= 0) c++;
    if(c == 0) c++;
    while(c != 0)
    {
        c++;
        c /= 10;
    }
    c += 1;
    if(!(num = malloc(c)))
    {
        fputs("Memory allocation failed.", stderr);
        exit(1);
    }
    if(!(ret = malloc(c + 1)))
    {
        fputs("Memory allocation failed.", stderr);
        free(num);
        exit(1);
    } 
    sprintf(num, "%d", i);
    ret[0] = ch;
    ret[1] = 0x00;
    strcat(ret, num);
    free(num);
    return ret;
}

int main(void)
{
    char *result;

    if(!(result = foo('C', 20))) exit(1);
    puts(result);
    free(result);
    return 0;
 }

私はこれらの両方をコンパイルしてテストしましたが、非常にうまく機能しているようです。幸運を。

于 2012-10-12T17:21:49.607 に答える
0

を使用するのはstrncatどうですか?

codepad の実際の例を参照してください: http://codepad.org/xdwH0ss

于 2012-10-12T17:02:49.317 に答える
0

私は C の専門家ではありませんが、一度定義した定数を変更する必要はないと思います。

于 2012-10-12T16:40:34.520 に答える
0

に複数の文字値を割り当てることはできませんchar。そのためには、文字列を取得する必要があります。多分このように。

int append(int input)
{
  const char P = 'P';

 //This where I want to append 1 to P to create "P1"
char app[2] ;  //extend that for your no. of digits
app[0] = P '
app[1] = (char) input  ;
}

これは一桁分です。大きな整数に動的メモリを割り当てて、ループで同じことを行うことができます。

于 2012-10-12T16:43:56.717 に答える
0

const チャットに何かを追加できるかどうかはわかりません (const であるため)。

しかし、そうではありません:

char p[3];
sprintf(p, "P%d",input);
于 2012-10-12T16:44:21.177 に答える