C 我正在做一个(字符串)函数,它混合了两个单词,但程序根本不工作
没有编译器错误,但当我运行程序并写入两个单词和位置时,程序停止并写入此错误: :进程返回255C 我正在做一个(字符串)函数,它混合了两个单词,但程序根本不工作,c,string,for-loop,C,String,For Loop,没有编译器错误,但当我运行程序并写入两个单词和位置时,程序停止并写入此错误: :进程返回255 #包括 #包括 字符串(字符[],字符[],整数,整数,整数); 内部主(空) { char-zk1[1000]; char-zk2[1000]; int pos=0; int n1=0; int n2=0; printf(“请输入第一个字符串:”); 获取(zk1); n1=sizeof(zk1)/sizeof(int); printf(“请输入第二个字符串:”); 获取(zk2); n2=size
#包括
#包括
字符串(字符[],字符[],整数,整数,整数);
内部主(空)
{
char-zk1[1000];
char-zk2[1000];
int pos=0;
int n1=0;
int n2=0;
printf(“请输入第一个字符串:”);
获取(zk1);
n1=sizeof(zk1)/sizeof(int);
printf(“请输入第二个字符串:”);
获取(zk2);
n2=sizeof(zk2)/sizeof(int);
printf(“plz输入位置”);
scanf(“%d”和“&pos”);
条纹(zk1,zk2,位置,n1,n2);
返回0;
}
字符串(字符zk1[],字符zk2[],整数位,整数n1,整数n2)
{
char zk3[]={(char)malloc(sizeof(zk1)+sizeof(zk2))};
int ctr=0;
对于(inti=0;i像这样固定样本
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *strins(char s1[], char s2[], int insert_pos, int sizeOfS1, int sizeOfS2);
int main(void){
char zk1[1000];
char zk2[1000];
char *zk3;
int pos=0;
int n1, n2;
printf("plz enter the first string : ");
scanf("%999[^\n]%*c", zk1);//gets shouldn't use. (already obsolete)
n1=sizeof(zk1);//strlen(zk1);
printf("plz enter the second string : ");
scanf("%999[^\n]%*c", zk2);
n2=sizeof(zk2);//sizeof(int) --> sizeof(char) but it's 1 by standard
printf("plz enter the position");
scanf("%d", &pos);
zk3 = strins(zk1, zk2, pos, n1, n2);
puts(zk3);
free(zk3);
return 0;
}
char *strins(char zk1[], char zk2[], int pos, int n1, int n2){
char *zk3 = malloc(n1 + n2);//+1 when use stelen for null-terminate
int ctr=0;
for(int i = 0; i < pos; i++){//pos isn't checking of valid
zk3[ctr++] = zk1[i];
}
for(int i = 0; zk2[i]; i++){//loop Until the '\0'
zk3[ctr++] = zk2[i];
}
for(int i = pos; zk1[i]; i++){
zk3[ctr++] = zk1[i];
}
zk3[ctr] = '\0';
return zk3;
}
#包括
#包括
#包括
字符*strins(字符s1[],字符s2[],整数插入位置,整数大小fs1,整数大小fs2);
内部主(空){
char-zk1[1000];
char-zk2[1000];
char*zk3;
int pos=0;
int n1,n2;
printf(“请输入第一个字符串:”);
scanf(“%999[^\n]%*c”,zk1);//gets不应使用。(已过时)
n1=sizeof(zk1);//strlen(zk1);
printf(“请输入第二个字符串:”);
scanf(“%999[^\n]%*c”,zk2);
n2=sizeof(zk2);//sizeof(int)-->sizeof(char),但按标准是1
printf(“plz输入位置”);
scanf(“%d”和“&pos”);
zk3=strins(zk1、zk2、pos、n1、n2);
puts(zk3);
自由基(zk3);
返回0;
}
字符*strins(字符zk1[],字符zk2[],整数位置,整数n1,整数n2){
char*zk3=malloc(n1+n2);//+1当使用stelen表示空终止时
int ctr=0;
对于(int i=0;isizeof(zk1)+sizeof(zk2))
:sizeof(zk1)
和sizeof(zk2)
是sizeof(char*)
,而不是sizeof(char[1000])
。好的,我写了这个((char zk3[]={(char malloc sizeof(char*)+sizeof(char*)}),它给了我同样的错误,你能解释一下吗(char[1000])+sizeof(char[1000]);
或char*zk3=malloc(strlen(zk1)+strelen(zk2)+1);
也zk3[pos]=zk2[i];
:相同位置的字符更新。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *strins(char s1[], char s2[], int insert_pos, int sizeOfS1, int sizeOfS2);
int main(void){
char zk1[1000];
char zk2[1000];
char *zk3;
int pos=0;
int n1, n2;
printf("plz enter the first string : ");
scanf("%999[^\n]%*c", zk1);//gets shouldn't use. (already obsolete)
n1=sizeof(zk1);//strlen(zk1);
printf("plz enter the second string : ");
scanf("%999[^\n]%*c", zk2);
n2=sizeof(zk2);//sizeof(int) --> sizeof(char) but it's 1 by standard
printf("plz enter the position");
scanf("%d", &pos);
zk3 = strins(zk1, zk2, pos, n1, n2);
puts(zk3);
free(zk3);
return 0;
}
char *strins(char zk1[], char zk2[], int pos, int n1, int n2){
char *zk3 = malloc(n1 + n2);//+1 when use stelen for null-terminate
int ctr=0;
for(int i = 0; i < pos; i++){//pos isn't checking of valid
zk3[ctr++] = zk1[i];
}
for(int i = 0; zk2[i]; i++){//loop Until the '\0'
zk3[ctr++] = zk2[i];
}
for(int i = pos; zk1[i]; i++){
zk3[ctr++] = zk1[i];
}
zk3[ctr] = '\0';
return zk3;
}