我试图模仿以K &式给出:R一个示例程序,它看起来像这样:不是appening连接两个字符串(K&R)
void strcat(char s[], char t[])
{
int i, j;
i = j = 0;
while (s[i] != '\0') /* find end of s */
i++;
while ((s[i++] = t[j++]) != '\0') /* copy t */
;
}
我想要做同样的事情,不同的是, t
到s
,我想复制到一个新的字符串。我的尝试如下:
#include <stdio.h>
#include <string.h>
void concat
(const char lstr[], const char rstr[], char outstr[])
{
int i, j;
i = j = 0;
while (lstr[i] != '\0')
outstr[i++] = lstr[i++];
while ((outstr[i++] = rstr[j++]) != '\0')
;
}
int main(void)
{
char lword[] = "foo";
char rword[] = "bar";
char outword[strlen(lword) + strlen(rword)];
concat(lword, rword, outword);
printf("%s\n", outword);
}
但是,上面只打印垃圾(我的意思是f�����bar
)。我找不到错误在哪里。
首先要做的事情。你应该多加一点来适应终止字符(即'\ 0')。 – Mahesh
您在第一个循环中不必要地更改'i'两次(并创建未定义行为以启动)。 – pmg
@pmg:的确,我没有想到这一点。 – michaelmeyer