如何在C语言中将char/int添加到char数组中?
如何将“.”添加到字符数组中:=“Hello World”在C中,因此我得到了一个字符数组:“Hello World”。这个问题似乎很简单,但我正在努力 尝试了以下操作:如何在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 *
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); //