2015-12-03 126 views
6

如何添加'。'到C中的char数组:=“Hello World”,所以我得到一个char数组:“Hello World”。问题看起来很简单,但我很挣扎。如何将char/int添加到C中的char数组?

尝试了以下内容:

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

strcat(str, tmp); 

但它不工作。它显示了我的错误:“传递'strcat'的参数2使得整形指针没有强制转换” 我知道在C中char可以被转换为int。我是否必须将tmp转换为char数组或者是否有更好的解决方案?

+0

小号tr包含没有字符串,只是大小声明嘿嘿 –

+0

可能重复[我怎么strcat一个字符数组字符在c + +](http://stackoverflow.com/questions/27522984/how-can-i-strcat-one- character-to-array-character-in-c) – MikeCAT

+0

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

回答

11

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

我删除了我的答案,并支持你的答案,你更好地解释了它 –

+0

这是要走的路。你的追加功能将完成这项工作。 – bruceg

+0

我必须用char类型的变量定义char tmp [2]。 (char temp = x; char tmp [2] = temp;)但它告诉我我有一个无效的初始化程序。哪里有问题? – missjohanna

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] = "."; 
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:

That was just a example with Hello World to describe the Problem. It must be empty as first in my real program. Program will fill it later. The problem just contains to add a char/int to an char Array

在这种情况下,snprintf()可以很容易地处理它为 “追加” 的整数类型为char缓冲器太。 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); 
1

在C/C++的字符串是一个空字节('\0')终止字符的阵列;

  1. 您的字符串str尚未初始化。
  2. 您必须连接字符串,并试图将单个字符(不含空字节,因此不是字符串)连接到字符串。

的代码应该是这样的:

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

这是我作为例子给出的问题的解决方案。但我说一个是char数组,另一个是char。如果它只是2个char数组,它根本就没有问题。在我的主程序中,我从fgetc中得到一个char或int。它可能工作,如果我写:char tmp [2]; tmp [1] = fgetc();但不确定! – missjohanna

+0

考虑到您对问题的修改,您可以尝试:char newstr [strlen(str)+2] = {'\ 0'}; strcpy(newstr,str); newstr [strlen(newstr)] = tmp; – user3629249