如何在C语言中将char/int添加到char数组中?

如何在C语言中将char/int添加到char数组中?,c,C,如何将“.”添加到字符数组中:=“Hello World”在C中,因此我得到了一个字符数组:“Hello World”。这个问题似乎很简单,但我正在努力 尝试了以下操作: char str[1024]; char tmp = '.'; strcat(str, tmp); 但它不起作用。它向我显示了错误:“传递'strcat'的参数2会使指针从整数变为不带强制转换” 我知道在C中,字符也可以转换为int。我是否也必须将tmp转换为字符数组,还是有更好的解决方案?strcat声明: char *

如何将“.”添加到字符数组中:=“Hello World”在C中,因此我得到了一个字符数组:“Hello World”。这个问题似乎很简单,但我正在努力

尝试了以下操作:

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

strcat(str, tmp);
但它不起作用。它向我显示了错误:“传递'strcat'的参数2会使指针从整数变为不带强制转换”
我知道在C中,字符也可以转换为int。我是否也必须将tmp转换为字符数组,还是有更好的解决方案?

strcat
声明:

char *strcat(char *dest, const char *src)
它需要2个字符串

它将导致内存问题,因为strcat正在查找以null结尾的cstring。您可以这样做:

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

strcat(str, tmp);

如果你真的想添加一个字符,你需要自己创建一个函数。大概是这样的:

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

append(str, tmp)
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

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

我认为您忘记了初始化字符串“str”:您需要在使用strcat之前初始化字符串。而且您还需要tmp是一个字符串,而不是一个字符。尝试更改此选项:

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


该错误是由于您正在将错误消息传递给
strcat()
。看看strcat()的原型:

   char *strcat(char *dest, const char *src);
但是您将
char
作为第二个参数传递,这显然是错误的

改用


正如OP评论的那样:


这只是一个用Hello World来描述问题的例子。信息技术 在我的真实程序中必须是空的。程序稍后将填充它。 这个问题只包含向char数组添加char/int

在这种情况下,
snprintf()。
snprintf()
的优点是将各种类型的数据连接到一个字符缓冲区中更为灵活

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

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

// Fill str here

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

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

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

    void append(char* s, char c) {
            int len = strlen(s);
            s[len] = c;
            s[len+1] = '\0';
    }
    
    append(str, tmp)
    
    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 
    

    建议更换此:

    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); // 
    

    Str不包含任何字符串,只包含大小声明HeHeHe可能的重复项,这只是一个用Hello World来描述问题的示例。它必须是空的,就像我真正的程序中的第一个一样。程序稍后将填充它。这个问题只包含向char添加char/intArray@MikeCAT语言错误。我删除了我的答案并支持你的答案,你解释得更好。这是正确的选择。您的append函数将完成这项工作。我必须使用char类型的变量定义char tmp[2]。(char temp=x;char tmp[2]=temp;)但它告诉我有一个无效的初始值设定项。问题出在哪里?@missjohanna只需使用append函数。您不能将字符分配给字符[]它们是不同的类型。对不起,我可能有点烦人,但我是来学习的。char数组中的一个元素不是char吗?在缓存中,它不是存储为char1 char2 char3。。。为什么我不能改变其中一个的值呢?这是我举个例子的问题的解决方案。但是我说一个是字符数组,另一个是字符数组。如果只有2个字符数组,那就没有问题了。在我的主程序中,我从fgetc获得一个字符或整数。如果我写:chartmp[2];tmp[1]=fgetc();但不确定!根据您对问题的修改,您可以尝试:char newstr[strlen(str)+2]={'\0'};strcpy(newstr,str);newstr[strlen(newstr)]=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); //