我一直在努力练习编程,所以我决定尝试自己输入strcat()函数,或者你知道的类似函数。我输入此代码是为了继续进行,我不知道问题出在哪里。
#include <stdio.h>
#include <stdlib.h>
void main(){
int i, j;
char a[100]; char b[100];
printf("enter the first string\n");
scanf("%s", &a);
printf("enter the second string\n");
scanf("%s", &b);
for(i =0; i<100; i++){
if(a[i] == '\0')
break;
}
// printf("%d", i);
for(j = i; j<100; j++){
a[j+1] = b[j-i];
if(b[j-i] == '\0')
break;
}
printf("%s", a);
}
没有语法错误(我希望) 编译器给我的结果是:它没有连接字符串,没有任何反应。
它为我提供了与用户输入的相同数组相同的数组,有没有人有答案?
PS:我还不知道指针。答案 0 :(得分:1)
将strcat
实现为“天真的字节复制循环”并不难,只需执行以下操作:
#include <stdio.h>
#include <string.h>
char* strdog (char* restrict s1, const char* restrict s2)
{
s1 += strlen(s1); // point at s1 null terminator and write from there
do
{
*s1 = *s2; // copy characters including s2's null terminator
s1++;
} while(*s2++ != '\0');
return s1;
}
int main(void)
{
char dst[100] = "hello ";
char src[] = "world";
strdog(dst, src);
puts(dst);
}
专业图书馆将在“对齐的数据块”的基础上进行复制,以获得轻微的性能提升。
答案 1 :(得分:0)
我建议这样做,更容易,你可以更好地理解。 注意:&#39; / 0&#39; character是C中数组中的最后一个字符,它实际上是关闭我的字符串。这就是为什么我最后把它放到fullStr的原因。为什么我不把它们用于第一和第二阵列?因为我设置了一个固定的长度,并且在用scanf扫描后它已经存在了。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char first[4];
char second[7];
char fullStr[10];
int i = 0;
int x = 0;
printf("Type your first name:\n");
scanf("%s", first);
printf("Type your second name:\n");
scanf("%s", second);
while (first[x] != '\0')
{
fullStr[i] = first[x];
i++;
x++;
}
x = 0;
while (second[x] != '\0')
{
fullStr[i] = second[x];
i++;
x++;
}
fullStr[i] = '\0';
printf("%s\n", fullStr);
return (0);
}
输出:
Type your first name:
Joe
Type your second name:
Martin
JoeMartin
尝试精确计算C中数组的长度。你应该学会指针和malloc。