在函数输入中附加一个字符?

时间:2012-10-12 16:38:23

标签: c

我需要send和integer到一个函数,然后将它追加到一个常量字符的末尾。

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"'
}

6 个答案:

答案 0 :(得分:5)

无论你做什么,都需要将数字转换为字符串,否则你不能创建包含这两个数字的字符串。

您实际上可以在一个函数调用中结合连接和int到字符串的转换:sprintf

char output[16];
sprintf(output, "P%d", input);

答案 1 :(得分:0)

我不是C的专家,但我不相信常量一旦定义就应该改变。

答案 2 :(得分: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  ;
}

这是一位数。您可以为大整数分配动态内存,并在循环中执行相同的操作。

答案 3 :(得分:0)

不确定是否可以向const聊天添加内容(因为它是一个const)。

但为什么不呢:

char p[3];
sprintf(p, "P%d",input);

答案 4 :(得分:0)

如何使用strncat

请参阅键盘上的工作示例:http://codepad.org/xdwhH0ss

答案 5 :(得分: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;
 }

我编译并测试了这两者,它们似乎工作得非常好。祝你好运。