如何添加'。'到char数组:=" Hello World"在C中,所以我得到一个char数组:" Hello World。"问题似乎很简单,但我很挣扎。
尝试以下方法:
char str[1024];
char tmp = '.';
strcat(str, tmp);
但它不起作用。它向我显示了错误:"传递'strcat'的参数2使得指针来自整数而没有强制转换" 我知道在C中,char也可以转换为int。我是否必须将tmp转换为char数组,还是有更好的解决方案?
答案 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);
如果你真的想追加一个字符,你需要自己动手。像这样:
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数组;
代码应如下所示:
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); //