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 到字符串的转换sprintf::

char output[16];
sprintf(output, "P%d", input);
于 2012-10-12T16:42:48.027 回答
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 回答
0

怎么用strncat

在键盘上查看一个工作示例:http: //codepad.org/xdwhH0ss

于 2012-10-12T17:02:49.317 回答
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 回答