#include<stdio.h>
int myStrLen(char *s);
void myStrConcat(char *string1, char *string2);
int main()
{
int n, i, a, b, c[10];
char s[10][41];
scanf("%d %d %d", &n, &a, &b);
for (i = 0; i < n; i++)
scanf("%d", &c[i]);
for (i = 0; i < n; i++)
scanf("%s", s[i]);
myStrConcat(s[a], s[b]);
for (i = 0; i < n; i++)
{
printf("%d", myStrLen(s[i]));
if (s[i + 1])
printf(" ");
}
printf("\n");
for (i = 0; i < n; i++)
{
printf("%s", s[c[i]]);
if (i < n - 1)
printf("\n");
}
return 0;
}
int myStrLen(char *s)
{
int i;
for (i = 0; s[i]; i++)
{ }
return i;
}
void myStrConcat(char *string1, char *string2)
{
int i = 0, j = 0;
while (string1[i] != '\0')
i++;
while (string2[j] != '\0')
string1[i++] = string2[j++];
string1[i] = '\0';
}
(c语言的)为什么oj平台一直显示运行时错误?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答
- 502203305 2019-05-11 21:07关注
错误原因myStrConCat函数,两个字符串拼接,当两个字符串特别长的时候,就需要动态分配内存来完成。
即char *str_after_concat=(char*)malloc ( sizeof(char) * (myStrLen(string1)+mystrLen(string2)+1));
这里的+1是因为我们将要返回一个C风格的字符串,
即字符串末尾以\0结尾。
那么至于你的myStrLen的for函数,可以换成for (i = 0; s[i]; i++);
这种看着很简洁。也可以不用这种方法,有很多不做举例。
那么上面进行新建了函数,那么后面的逻辑就差不多正确了,只需要将string1换成前面我的代码所创建的变量str_after_concat
然后并且将这个指针返回并输出(因为malloc是在堆中动态分配,不会像局部变量一样回收。)解决 2无用
悬赏问题
- ¥15 Python爬取指定微博话题下的内容,保存为txt
- ¥15 vue2登录调用后端接口如何实现
- ¥65 永磁型步进电机PID算法
- ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
- ¥88 找成都本地经验丰富懂小程序开发的技术大咖
- ¥15 如何处理复杂数据表格的除法运算
- ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
- ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
- ¥15 latex怎么处理论文引理引用参考文献
- ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?