问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言问题,最好基于我的程序进行修改

发布网友 发布时间:2022-05-31 16:50

我来回答

5个回答

热心网友 时间:2023-10-20 01:27

主函数的问题不大,但也应尽力克服。str_bin这个函数存在严重问题,即使可以正常运行那也是运气——C是函数中的局部数组,函数退出后就消失了,返回C指针后是“无法保证”C中的数据是正常的,而且可能会带来其他严重后果;而且,C是指针,但函数名前面写的却是char,所以str_bin要重写。基本按你的思路,写一个你对照看。有问题续问。

#include "stdio.h"
char *str_bin(char *s1,char *s2,char *s){//返回应该是指针,传过来的也应该是指针
char *p=s;
while(*s1 || *s2){
if(*s1<=*s2 && *s1)
*s++=*s1++;
else if(*s2)
*s++=*s2++;
else if(*s1)
*s++=*s1++;
}
*s='\0';
return p;
}
int main(int argv,char *argc[]){
char a[100],b[100],c[200];//在这里声明C数组
char *p=0;
printf("Input 2 string...\n");
//gets(a);//这个函数不能控制长度,超过100字符会产生问题
scanf("%100s%100s",a,b);//用这个函数可避免上述问题
//gets(b);
p=str_bin(a,b,c);//把c数组的地址传给函数
puts(p);
return 0;
}

运行样例:

热心网友 时间:2023-10-20 01:28

#include<stdio.h>
#include<string.h>

char C[200];//你将C定义为函数内部的局部变量,程序返回时该变量的内存已经释放,内容不能正确返回,因此应该将它定义为全局变量。

char *str_bin(char *s1,char *s2) //字符串变量是char*型的,不是char型,char只有一个字符。
{
int n1,n2,i,j,k;
//char A[100],B[100],C[200];s1,s2可以直接使用,不必另外定义A,B, 将C定义为函数内部的局部变量,程序返回时该变量的内存已经释放,内容不能正确返回,因此应该将它定义为全局变量。
//strcpy(A,s1);
//strcpy(B,s2);
n1=strlen(s1);
n2=strlen(s2);
for(i=0,j=0,k=0;(i<n1)&&(j<n2);k++){
//if(s1[i]<s2[j]||s2[j]=='\0'){ 如果s1[i]是'\0',总是成立的,怎么办?

/*

正确做法:如果两个字符串都没有到达终点,比较当前字符,小的一个复制到C[k],相应下标增加1;如果两个相等,两个都复制到C(允许重复),相应下标都增加1;

如果有一个字符串到了末尾,将另一个字符串余下的内容复制到C[]

字符串长度不包含末尾的'\0'

*/

if(s1[i]<s2[j]) C[k]=s1[i++];
else if (s1[i]>s2[j]) C[k]=s2[j++];
else {

C[k++]=s1[i++];

C[k]=s2[j++];

}

}

if (i==n1) while (j<n2) C[k++]=s2[j++];

else if (j==n2) while (i<n1) C[k++]=s1[i++];

C[k]=0;

return C;
}

int main()
{
char a[100],b[100];
//char*p;//=0不必,如果一定要赋初值,应该是char *p=NULL;C定义为全局变量后p*也不必用了。
gets(a);
gets(b);
//p=str_bin(a,b);
str_bin(a,b);
puts(C);
getchar();
return 0;
}

热心网友 时间:2023-10-20 01:28

你好!

    你的函数传递的是字符,不是字符串,改成传递字符串地址

修改后的完整代码,你对比以前的看看吧

#include<stdio.h>
#include <string.h>
#include<string.h>
char *str_bin(char *s1,char *s2)  // 函数和参数都改成指针类型
{
int n1,n2,i,j,k;
char A[100],B[100],C[200];
strcpy(A,s2);
strcpy(B,s1);
n1=strlen(A);
n2=strlen(B);
for(i=0,j=0,k=0;i<n1||j<n2;k++){
if(A[i]<B[j]||B[j]=='\0'){
C[k]=A[i];
i++;
}
else{
C[k]=B[j];
j++;
}
}
return C;      // 函数的返回值
}
int main()
{
char a[100],b[100];
char*p=0;
gets(a);
gets(b);
p=str_bin(a,b);
puts(p);
return 0;
}

热心网友 时间:2023-10-20 01:29

你定义的函数返回值是一个char型的字符,但是你子函数返回的是一个字符串的指针,当然类型不对
逻辑上稍有偏差,要求是合并到str1中,但是你是赋值了新的c,所以不对

赋值到新的字符串后,你需要最后把c字符串拷贝到str1中,才可以
那么子函数不需要返回值,最后直接打印main中的a字符串即可

修改部分,你定义错了,所以改为char *str_bin(char *s1,char *s2)
定义要加上*。main不用改
只要你子函数中for没有错的话,程序应该是没问题的追问定义加上*是什么原因?我以前定义时候不加这个啊

追答返回值要和你的main中要的类型要对应,这个你应该明白吧
再说你需要什么,你需要一个p是指针,而且你子函数中return中c也是一个指针
但是你子函数类型是一个char,这样对吗?

热心网友 时间:2023-10-20 01:29

内存错误,函数str_bin中C[200]是一个局部变量,函数结束后局部变量的内存要被释放,因此数组A,B,C的内存都会被释放掉,你返回C,返回的只是数组C的首地址,它指向一片内存,但内存中数据已经不存在了,你如何打印?你写的是归并的程序,这个思路没错,但从你编程风格来看,还有待提高啊,内存管理的知识你还不懂,以后多加油,这个程序你最好先研究下,还有有关字符串操作的不需要返回值,系统自带的strcpy(),strcat()都没有,因为你传递一个指针,操作的就是指针所指向的内存
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 用C语言编程修改文件名(C++也行) c语言修改指定一行的内容 MFC编程 有A B C三个对话框,我修改C中控件的caption时出错,怎样控制修改的是当前C的呢? c语言获得当前系统时间 并且修改为指定时间怎么写啊。 c语言如何设置当前目录 用C语言获取当前系统时间和修改系统时间的函数是什么?顺便举个例子! C语言,如何将UTC时间改为当前系统的时间 C语言,更改指定位置数据文件内容,求大神 LINUX C语言编程 修改当前目录下的所有子目录所有者为当前用户 快要考事业单位了,边上班,边看书,,,,有时有时间也看不进书,怎么办? 本科会计专业一战考研失败,是边工作边准备二战好,还是边工作边考公务员和事业单位,等考上再考在职好 28岁已满,单身,女,这个年龄准备边工作边考事业单位。在三线城市, 是在家复习准备考事业单位,还是边工作边考? 关于在职上班一边工作一边备考公务员的问题 边工作,边备考事业单位怎么样? 边工作边考事业单位 在公司上班也能边上班边考事业单位吗 边工作边考事业单位,可行性高吗 一边工作一边考事业单位好吗? HP打印机M1005如何扫描 C语言文件操作中 为什么无法修改中间某一行数据? 关于C语言改变顺序表 C语言程序修改题 boss买直豆跟不买直豆区别 FBJ1是干什么的 化工厂仪表控制室内的配电箱需要做防爆处理吗 什么事防爆电器 火车票改签怎么弄?急 王府中环有哪些必逛的大牌?有推荐吗? 怎样能把自己的从对方的微信里彻底删除? 怎么删除自己的 怎样能把自己的从对方的微信里彻底删除 怎样能把自己的从对方的微信里彻底删除 有的我不想要了,怎么能删除掉 如何删除自己的 微信里有自己的怎么删掉呀 怎样能把自己的从对方的微信里彻底删除 怎样把新建的删除 怎样把新建的删除 武汉健康管理师补贴政策