将int连接到字符串或在C中转换

时间:2014-06-28 07:43:21

标签: c string int concatenation string-concatenation

我在foo-结束时寻找一个6位数的随机数,我现在已经尝试了几个小时而没有成功。只有错误信息

note: expected 'char *' but argument is of type 'int'

我曾尝试将int转换为char,但它只是不喜欢它,我的代码在下面,

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

char* concat(char *s1, char *s2)
{
    char *result = malloc(strlen(s1)+strlen(s2)+1);//+1 for the zero-terminator
    //in real code you would check for errors in malloc here
    strcpy(result, s1);
    strcat(result, s2);
    return result;
}

int main ()
{
  srand(time(NULL));
  int r = rand();

  printf(concat("foo-", r));

  return 0;
}

4 个答案:

答案 0 :(得分:2)

你可以这样做

printf("foo-%d", r);

char buffer[10];
sprintf(buffer, "%d", r);
char *c = concat("foo-", r);
printf("%s", c);
free(c);

这将使用您的功能。请阅读sprintfprintf

的手册页

答案 1 :(得分:1)

例如:

srand(time(NULL));
int r = rand();
char* str = (char*)malloc(sizeof(char)*20);
snprintf(str, 7, "%d", r);

if (strlen(str) < 6) {  /* if r had less than 6 digits */
    sprintf(str, "%06d", r);
}

char* s = concat("foo-", str);
printf("%s",s);
free(str);
free(s);

return 0;


来自http://joequery.me/code/snprintf-c/

  

int snprintf(char *str, size_t size, const char *format, ...);

  str是printf输出重定向到的缓冲区。 size是将写入的最大字节数(字符数)   缓冲区,包括snprintf的终止空字符   自动为您安排。 format和可选... snprintf()   参数只是字符串格式,如“%d”,myint如图所示   printf的。

因此,为了获得转换后的6位数字,您可以在size中指定7 sprintf()参数(包括空字符)。

str函数将格式化的输出发送到第一个参数指向的字符串(在我们的例子中,这是%06d)。 str格式规定,snprintf()至少会发送6位数字

结论

您想将6位数字转换为字符数组。如果数字至少为6位数,sprintf(),您将获得转换数字的前6位数字。如果它少于6位,r = 101;将在开头添加零,直到有6位数。因此,如果000101结果为concat


请注意您使用printf(concat("foo-",r)); 功能:

printf()

编译器警告(在我的情况下为gcc):

  

警告:格式不是字符串文字,也不是格式参数   [-Wformat安全]

{{1}}函数需要知道传递的字符串参数的格式。这里有一个很好的答案:warning: format not a string literal and no format arguments

答案 2 :(得分:1)

在示例中,我使用sprintfint转换为char[]。此外,我正在使用模运算来确保结果不超过6位数。 %06d的{​​{1}}参数将确保结果不少于6位。

sprintf

答案 3 :(得分:0)

当您尝试使用concatint作为第二个参数调用r时,会出现问题。注意你对concat的定义:

char* concat(char *s1, char *s2);

第二个参数是char *s2。在您的程序中,您尝试使用以下命令调用它:

int r = rand();

printf(concat("foo-", r));

r是一个整数。试试这个来解决问题:

int main ()
{
    srand(time(NULL));
    int r = rand();
    char str[] = "bar";

    printf(concat("foo-", str));

    return 0;
}