关于字符串输出问题

KOMO_TI 2016-12-04 04:55:11
#include<stdio.h>
char* longestPalindrome(char* s) {
char substring[100] = { 0 };
int i, j, k, temp;
if (s[0] == '\0')
return substring;
else
{
for (i = 0; s[i] != '\0'; i++)
{
for (j = i + 1; s[j] != '\0'; j++)
if (s[i] == s[j])
break;
if (s[i] == s[j])
break;
}
temp = 0;
for (k = i; k <= j; k++)
{
substring[temp] = s[k];
temp++;
}
return substring;
}
}
void main()
{
char *p1;
char *p = "abab";
p1=longestPalindrome(p);
printf("%c%c%c", p1[0], p1[1], p1[2]);
printf("%s",p1);
getchar();
}

以上是代码,目的是返回一个字符串的Palindromic Substring,我一个一个打出来是可以的,用%s之后就不行了。如果之前没用%c一个一个打出来,直接%s输出,结果是NULL;不知道为什么。
...全文
134 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-12-05
  • 打赏
  • 举报
回复
栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时,没有谁执行一段代码去释放/销毁/析构它所占用的内存,仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时,会自动执行其析构函数,……
ck2333 2016-12-05
  • 打赏
  • 举报
回复
除了上面的问题,还有一个问题就是,字符串是以'\0'为结尾标志的,没有'\0'不叫做字符串。(你的substring后面必须得加上)
小灸舞 版主 2016-12-05
  • 打赏
  • 举报
回复
未定义行为,返回一个局部变量的地址,没必要花太多时间在这个上面
paschen 2016-12-04
  • 打赏
  • 举报
回复
你的char substring[100] 是一个局部数组,函数结束时就销毁了,你不应返回一个局部变量的地址,否则是一个未定义行为
GKatHere 2016-12-04
  • 打赏
  • 举报
回复
不要近观回局部变量

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧