void cmpstr(char (*p)[3],int n)
{
int i=0,j=0;
char* tmp=NULL;
//循环每个字符串
for(i=0;i<n-1;i++)
{
//比较字符串大小
for(j=0;(*(p+1))[j]!='\0';j++)
{
//升序排放字符串
if((*(p+i)[j])>(*(p+i+1))[j])
{
tmp=*(p+i);
*(p+i)=*(p+i+1);
*(p+i+1)=tmp;
}
}
}
}
int main()
{
//输入三个字符串按由小到大输出
char (*arr)[3]={{"cdef"},{"bdfa"},{"acbef"}};
int i=0;
/* while(i<3)
{
scanf("%s",*(arr+1));
i++;
}*/
cmpstr(arr,3);
i=0;
while(i<3)
{
printf("%s",*(arr+i));
i++;
}
return 0;
}
//为什么程序崩溃了
//我到底哪里错了
![](https://profile-avatar.csdnimg.cn/default.jpg!4)
字符串数组如何定义,如何传参,如何拿取各字符串首地址
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- Kwan的解忧杂货铺@新空间代码工作室 2024-04-15 23:22关注
晚上好🌙🌙🌙
本答案参考ChatGPT-3.5问题描述:
-
字符串数组如何定义?
-
如何传参?
-
如何取每一个字符串的首地址?
-
为什么程序崩溃了?
-
哪里错了?
解决方案:
-
字符串数组的定义方式为:char (*p)[N],其中N为字符串的长度,p为指向字符串数组的指针。
-
字符串数组的传参方式为:将指向字符串数组的指针作为参数传递给函数。
-
取每一个字符串的首地址可以通过指针间接访问的方式来实现,即使用*(p+i)或p[i]来取得第i个字符串的首地址。
-
程序崩溃的原因可能是以下几个方面:
(1) 内存越界:比如访问了非法的地址,或者访问了未分配的内存空间。
(2) 空指针:访问了指向空地址的指针。
(3) 数组越界:访问了超过数组索引范围的元素。
-
虽然提问中的代码存在一些错误,但是无法确定具体哪里出了问题。需要逐行检查代码,查找错误,并进行修改。可能的错误如下:
(1) 字符串数组的定义方式有误。
(2) cmpstr函数中比较字符串大小的方式有误。
(3) 输入输出字符串的顺序有误。
修改后的代码如下:
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 -
悬赏问题
- ¥20 Github上传代码没有contribution和activity记录
- ¥20 SNETCracker
- ¥15 数学建模大赛交通流量控制
- ¥15 为什么我安装了open3d但是在调用的时候没有报错但是什么都没有发生呢
- ¥50 paddleocr最下面一行似乎无法识别
- ¥15 求某类社交网络数据集
- ¥15 靶向捕获探针方法/参考文献
- ¥15 很抱歉出现错误word不能启动(24),如何解决?
- ¥15 javascript下载网络图片
- ¥15 excel中的填充效果 对应poi的哪个对象啊