我需要一个函数的发送和整数,然后将它附加到一个常量字符的末尾。
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"'
}
我需要一个函数的发送和整数,然后将它附加到一个常量字符的末尾。
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"'
}
无论做什么,都需要将数字转换为字符串,否则无法创建包含两个数字的字符串。
您实际上可以在一个函数调用中结合连接和 int 到字符串的转换sprintf
::
char output[16];
sprintf(output, "P%d", input);
我不是 C 方面的专家,但我认为常量一旦定义就不应更改。
您不能为 分配多个字符值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 ;
}
这是一位数。您可以为大整数分配动态内存并在循环中执行相同的操作。
不确定您是否可以在 const 聊天中添加一些内容(因为它是 const)。
但为什么不:
char p[3];
sprintf(p, "P%d",input);
怎么用strncat
?
在键盘上查看一个工作示例:http: //codepad.org/xdwhH0ss
我会将数字转换为字符串(假设您可以访问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;
}
我编译并测试了这两个,它们似乎工作得很好。祝你好运。