我放弃了,我只是不知道为什么这不起作用:
int main(){
int i;
char destination[1000];
char* str = "S:15 B:20 B A:15",letra;
for (i=0;i<strlen(str);i++){
letra = str[i];
printf("%c",letra);
strcat(destination,letra);
}
printf("%s",destination);
return 0;
}
我只是希望能够将字符串连接到其他字符串,这只需要一个字符串并将char字符串复制到另一个空字符串(具有足够的大小),但它无论出于何种原因都不起作用。如果不使用“letra”我在strcat中使用文字字符串,它可以工作,但是如果我使用“letra”它会失败,即使“letra”是一个有效的字符,如果我printf“letra”它也能正常工作。
任何人都可以帮我一把吗?我完全陷入困境,我错过了一些简单但我不知道它是什么。
答案 0 :(得分:2)
您的代码存在一些问题:
destination
未初始化,因此对strcat
的调用无效。您必须提供有效的C字符串作为第一个参数。strcat
对C字符串进行操作,而不是char
。因此,您无法将letra
作为第二个参数传递。strlen(str)
。 strcat
一次添加字符的效率极低。在这个例子中,循环本身是没有意义的,因为它可以被单个strcpy
调用替换。但我从评论中了解到,在实际代码中,您希望以条件方式添加字符。这将涉及迭代源字符串,此时您最好以类似的方式填充目标字符串。
您可以编写如下代码:
size_t i = 0;
char destination[1000];
const char* str = "S:15 B:20 B A:15";
const char* p = str;
while (p)
{
if (appendThisChar(*p))
destination[i++] = *p;
p++;
}
destination[i] = '\0';
为了简单起见,我忽略了对缓冲区溢出的任何检查,但显然在实际代码中你会确保你不能在缓冲区的末尾写入。
答案 1 :(得分:-1)
修正了它:
char temp[ 2 ];
temp[ 0 ] = letra;
temp[ 1 ] = '\0';
strcat(destination,temp);