如何在C中的char数组中添加char / int?

时间:2015-12-03 00:27:42

标签: c

如何添加'。'到char数组:=" Hello World"在C中,所以我得到一个char数组:" Hello World。"问题似乎很简单,但我很挣扎。

尝试以下方法:

char str[1024];
char tmp = '.';

strcat(str, tmp);

但它不起作用。它向我显示了错误:"传递'strcat'的参数2使得指针来自整数而没有强制转换" 我知道在C中,char也可以转换为int。我是否必须将tmp转换为char数组,还是有更好的解决方案?

5 个答案:

答案 0 :(得分:19)

strcat有声明:

char *strcat(char *dest, const char *src)

它需要2个字符串。 While this compiles:

char str[1024] = "Hello World";
char tmp = '.';

strcat(str, tmp);

它会导致错误的内存问题,因为strcat正在寻找一个空终止的cstring。你可以这样做:

char str[1024] = "Hello World";
char tmp[2] = ".";

strcat(str, tmp);

Live example.

如果你真的想追加一个字符,你需要自己动手。像这样:

void append(char* s, char c) {
        int len = strlen(s);
        s[len] = c;
        s[len+1] = '\0';
}

append(str, tmp)

当然,您可能还需要检查字符串大小等,以确保内存安全。

答案 1 :(得分:1)

错误是由于您将错误传递给strcat()。看看strcat()的原型:

   char *strcat(char *dest, const char *src);

但你传递char作为第二个参数,这显然是错误的。

改为使用snprintf()

char str[1024] = "Hello World";
char tmp = '.';
size_t len = strlen(str);

snprintf(str + len, sizeof str - len, "%c", tmp);

由OP评论:

  

这只是Hello World描述问题的一个例子。它   在我的真实程序中必须是空的。程序将在稍后填写。   问题只是包含将char / int添加到char数组

在这种情况下,snprintf()可以轻松处理它,以便将整数类型“追加”到char缓冲区。 snprintf()的优点是可以更灵活地将各种类型的数据连接到char缓冲区。

例如,连接字符串,char和int:

char str[1024];
ch tmp = '.';
int i = 5;

// Fill str here

snprintf(str + len, sizeof str - len, "%c%d", str, tmp, i);

答案 2 :(得分:1)

在C / C ++中,字符串是以NULL字节('\0')结尾的char数组;

  1. 您的字符串str尚未初始化。
  2. 您必须连接字符串,并且您尝试将单个字符串(没有空字节,因此它不是字符串)连接到字符串。
  3. 代码应如下所示:

    char str[1024] = "Hello World"; //this will add all characters and a NULL byte to the array
    char tmp[2] = "."; //this is a string with the dot 
    strcat(str, tmp);  //here you concatenate the two strings
    

    请注意,您只能在声明声明期间将字符串文字指定给数组 例如,不允许使用以下代码:

    char str[1024];
    str = "Hello World"; //FORBIDDEN
    

    并应替换为

    char str[1024];
    strcpy(str, "Hello World"); //here you copy "Hello World" inside the src array 
    

答案 3 :(得分:0)

我认为你已经忘记了初始化你的字符串" str":你需要在使用strcat之前初始化字符串。而且你还需要tmp是一个字符串,而不是一个字符。尝试改变这个:

char str[1024]; // Only declares size
char tmp = '.';

char str[1024] = "Hello World";  //Now you have "Hello World" in str
char tmp[2] = ".";

答案 4 :(得分:0)

建议更换:

char str[1024];
char tmp = '.';

strcat(str, tmp);

用这个:

char str[1024] = {'\0'}; // set array to initial all NUL bytes
char tmp[] = "."; // create a string for the call to strcat()

strcat(str, tmp); //