#include<string.h>
char * link(char a[],char b[]){
char sum[200];
for(int i=0;i<strlen(a);i++){
sum[i]=a[i];
for(int j=1;j<=strlen(b);j++){
sum[i+j]=b[j-1];
}
}
printf("%s\n",sum);
return sum;
}
int main(){
char str1[100],str2[100];
char *a;
printf("please input two sentence:\n");
scanf("%s",str1);
printf("the two:");
scanf("%s",str2);
//gets(str2);
a=link(str1, str2);
//for(int i=0;*a!='\0';i++){
printf(a);
//*a++;
//}
}
结果
please input two sentence:
q
the two:W
qW\353\240
\360N\353\240
13 个解决方案
#1
为什么会出现乱码?
#2
sum结尾没加'\0'
#3
修改如下:
#include<string.h>
char *link(char a[], char b[]) {
int n1, n2;
n1 = strlen(a), n2 = strlen(b);
char *res = malloc(n1 + n2 + 1);
strncpy(res, a, n1);
strncpy(res + n1, b, n2);
res[n1 + n2] = 0;
return res;
}
int main() {
char str1[100], str2[100];
char *res;
printf("please input two sentence:\n");
scanf("%s%s", str1, str2);
res = link(str1, str2);
printf("%s\n", res);
free(res);
return 0;
}
//please input two sentence:
//zhangxiang David
//zhangxiangDavid
#4
用strcat不好吗?
#5
sum没有字符串结束符号
link函数内for循环有问题,如果参数a长度为1,程序是正常,如果a长度>1那么显示内容并不是两个字符串的拼接
link函数内for循环有问题,如果参数a长度为1,程序是正常,如果a长度>1那么显示内容并不是两个字符串的拼接
#6
字符串以0结尾, 所以sum应该在最后放个0, 这里二重循环是什么意思,不太明白?
#7
内外循环是什么意思?
#8
二层循环?有问题
简单点的逻辑:
首先确定a的长度 > 连接后的新长度
1. 目的字符串,a,strlen(a),得到a的长度
2. 使用下标寻址,来一个循环,a的尾部逐个加上b的字符
3. 返回地址
4. main函数中,最好使用strcpy(a,返回地址),不用用=号,
简单点的逻辑:
首先确定a的长度 > 连接后的新长度
1. 目的字符串,a,strlen(a),得到a的长度
2. 使用下标寻址,来一个循环,a的尾部逐个加上b的字符
3. 返回地址
4. main函数中,最好使用strcpy(a,返回地址),不用用=号,
#9
+++这种方法是可以行的~当然也可以直接使用strcat的库函数
#10
char sum[200];没有初始化,---》char sum[200] = {‘/0’}
或者拼接完后加一个字符串结束sum[strlen(a)+strlen(b)] = '\0';
或者拼接完后加一个字符串结束sum[strlen(a)+strlen(b)] = '\0';
#11
char* a = "asd";
char* b = "edf";
int lena = strlen(a);
int lenb = strlen(b);
int lenAll = lena + lenb;
char* all = malloc((lenAll+1)*sizeof(char));
memset(all, 0, (lenAll+1)*sizeof(char));
sprintf(all, "%s%s", a,b);
printf(all);
#12
不用str函数:
char* a = "asd";
char* b = "edf";
int lenNew = 0;
char* tmp = a;
while (*tmp != '\0') {
lenNew++;
tmp++;
}
tmp = b;
while (*tmp != '\0') {
lenNew++;
tmp++;
}
char* newStr = malloc((lenNew+1)*sizeof(char));
memset(newStr, 0, (lenNew+1)*sizeof(char));
int newIndex = 0;
tmp = a;
while (*tmp != '\0') {
newStr[newIndex] = *tmp;
tmp++;
newIndex++;
}
tmp = b;
while (*tmp != '\0') {
newStr[newIndex] = *tmp;
tmp++;
newIndex++;
}
#13
char *mystrcat(char a[], char b[])
{
char *ret = a;
if (a != NULL && b != NULL) {
while (*a != 0) {
a++;
}
while (*b != 0) {
*a++ = *b++;
}
*a = 0;
}
return ret;
}
#1
为什么会出现乱码?
#2
sum结尾没加'\0'
#3
修改如下:
#include<string.h>
char *link(char a[], char b[]) {
int n1, n2;
n1 = strlen(a), n2 = strlen(b);
char *res = malloc(n1 + n2 + 1);
strncpy(res, a, n1);
strncpy(res + n1, b, n2);
res[n1 + n2] = 0;
return res;
}
int main() {
char str1[100], str2[100];
char *res;
printf("please input two sentence:\n");
scanf("%s%s", str1, str2);
res = link(str1, str2);
printf("%s\n", res);
free(res);
return 0;
}
//please input two sentence:
//zhangxiang David
//zhangxiangDavid
#4
用strcat不好吗?
#5
sum没有字符串结束符号
link函数内for循环有问题,如果参数a长度为1,程序是正常,如果a长度>1那么显示内容并不是两个字符串的拼接
link函数内for循环有问题,如果参数a长度为1,程序是正常,如果a长度>1那么显示内容并不是两个字符串的拼接
#6
字符串以0结尾, 所以sum应该在最后放个0, 这里二重循环是什么意思,不太明白?
#7
内外循环是什么意思?
#8
二层循环?有问题
简单点的逻辑:
首先确定a的长度 > 连接后的新长度
1. 目的字符串,a,strlen(a),得到a的长度
2. 使用下标寻址,来一个循环,a的尾部逐个加上b的字符
3. 返回地址
4. main函数中,最好使用strcpy(a,返回地址),不用用=号,
简单点的逻辑:
首先确定a的长度 > 连接后的新长度
1. 目的字符串,a,strlen(a),得到a的长度
2. 使用下标寻址,来一个循环,a的尾部逐个加上b的字符
3. 返回地址
4. main函数中,最好使用strcpy(a,返回地址),不用用=号,
#9
+++这种方法是可以行的~当然也可以直接使用strcat的库函数
#10
char sum[200];没有初始化,---》char sum[200] = {‘/0’}
或者拼接完后加一个字符串结束sum[strlen(a)+strlen(b)] = '\0';
或者拼接完后加一个字符串结束sum[strlen(a)+strlen(b)] = '\0';
#11
char* a = "asd";
char* b = "edf";
int lena = strlen(a);
int lenb = strlen(b);
int lenAll = lena + lenb;
char* all = malloc((lenAll+1)*sizeof(char));
memset(all, 0, (lenAll+1)*sizeof(char));
sprintf(all, "%s%s", a,b);
printf(all);
#12
不用str函数:
char* a = "asd";
char* b = "edf";
int lenNew = 0;
char* tmp = a;
while (*tmp != '\0') {
lenNew++;
tmp++;
}
tmp = b;
while (*tmp != '\0') {
lenNew++;
tmp++;
}
char* newStr = malloc((lenNew+1)*sizeof(char));
memset(newStr, 0, (lenNew+1)*sizeof(char));
int newIndex = 0;
tmp = a;
while (*tmp != '\0') {
newStr[newIndex] = *tmp;
tmp++;
newIndex++;
}
tmp = b;
while (*tmp != '\0') {
newStr[newIndex] = *tmp;
tmp++;
newIndex++;
}
#13
char *mystrcat(char a[], char b[])
{
char *ret = a;
if (a != NULL && b != NULL) {
while (*a != 0) {
a++;
}
while (*b != 0) {
*a++ = *b++;
}
*a = 0;
}
return ret;
}