c语言,菜鸟级别问题。用sizeof(),比较两个字符串长度。错在哪里,大神帮忙改正一下
解决时间 2021-02-05 03:20
- 提问者网友:嗝是迷路的屁
- 2021-02-04 18:06
#include
char *fun(char a[],char b[]);
void main()
{
char a[100],b[100], *c;
printf("please input two string chracters:\n");
scanf("%s",a);//输入a字符串
printf("\n");
scanf("%s",b);//输入b字符串
c=fun(a,b);//用c接收长字符串地址
printf("the longer string is:\n%s", c);//打印出长的字符串
}
char *fun(char a[],char b[])//比较长度的函数
{
char *c;
if(sizeof(a)>sizeof(b))//长的字符串地址,赋值给c
{c=a;}
else if(sizeof(a) {c=b;}
else {printf("the two string is the same longth!\n");}//一样长输出这个
return c;//把长的字符串地址返回
}
最佳答案
- 五星知识达人网友:洎扰庸人
- 2021-02-04 19:04
if(sizeof(a)>sizeof(b))//长的字符串地址,赋值给c
这里用sizeof只是算出的指针的长度.应该用strlen
全部回答
- 1楼网友:刀戟声无边
- 2021-02-04 21:26
sizeof是判断两字符串的字节长度,字符串长度比较一般不用这个函数,多用strlen(),包含头文件#include
if(strlen(a)>strlen(b))//长的字符串地址
{c=a;}
else if(strlen(a)
- 2楼网友:封刀令
- 2021-02-04 20:18
把下面的函数中所有用到的sizeof函数改为strlen即可,因为你之前定义的a和b都是定长的1--,所以最后用sizeof函数的话一定是一样长,改用strlen函数的话,就会在统计出实际的字符串长度。
下面是修改后的代码,你可以运行下。我用的是C++运行的,能够实现比较的目的。
#include
#include
char *fun(char a[],char b[]);
void main()
{
char a[100],b[100], *c;
printf("please input two string chracters:\n");
scanf("%s",a);//输入a字符串
printf("\n");
scanf("%s",b);//输入b字符串
c=fun(a,b);//用c接收长字符串地址
printf("the longer string is:\n%s", c);//打印出长的字符串
}
char *fun(char a[],char b[])//比较长度的函数
{
char *c;
if(strlen(a)>strlen(b))//长的字符串地址,赋值给c
{c=a;}
else if(strlen(a)
- 3楼网友:神的生死簿
- 2021-02-04 19:49
用sizeof 可以但是只能用在下面几种情况中:
1 char ch; sizeof(ch) 对变量区长度 结果是1
2 char *str = "abcdefg"; sizeof(str); 同样也是对变量取长度,但这里是指针,那么就是4
3 sizeof("abcdefg"); 这里有同学会以为和2一样取的是指针的长度,其实不然这里是确切的静态内存的长度,结果是7。因为你都告诉他这个静态内存的长度了,他为什么还不知道呢,是不?
4 char arr[10]; sizeof(arr) 这里和3有点像,就是数组的长度10.。
5 struct aa{int a; int b;}; sizeof(struct aa) 这里求的是struct aa类型的长度结果是8,当然也可以是常用的类型如:sizeof(char) , sizeof(int)等等。
最后分析的你的题目我们知道编译器默认认为形参数组为对应的指针,就是说只要形参是数组那么就是指针,对照上面的第2条那就是4.
我要举报
大家都在看
推荐资讯