为什么调试会出现这个错误

ccbbcc 2025-06-02 14:03:41

代码:

#include<stdio.h>
#include<string.h>
char * substr(char *str,int n)
{
	unsigned char len=strlen(str);
	for(;len>0;len--)
	{
		if(str[len-1]==' ')
			str[len-1]=0;
	}
	for(;n>0;n--)
	{
		str+=(strlen(str)+1);
	}
	return str;
	
}

int main(void)
{
	char *str1;
	char *str="123 456 789";
	*str1=substr(str,2);
	printf("str1 =%s\n",*str1);
	return 0;
}

 

请专家指教,谢谢!

...全文
387 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouciming 9天前
  • 打赏
  • 举报
回复

改为 str1=substr(str,2)

  • 打赏
  • 举报
回复

字符串常量不可修改,str1 未初始化且str += (strlen(str)+1); 逻辑错误

ccbbcc 9天前
  • 举报
回复
@温酒斩年华 好了
zhouciming 9天前
  • 举报
回复
@温酒斩年华 str作为指针,应该OK的吧?
ccbbcc 06-06
  • 打赏
  • 举报
回复

谢谢!我改成这样

#include<stdio.h>
#include<string.h>
char * substr(char *str,int n)
{
    unsigned char len=strlen(str);
    for(;len>0;len--)
    {
        if(str[len-1]==' ')
            str[len-1]=0;
    }
    for(;n>0;n--)
    {
        str+=(strlen(str)+1);
    }
    return str;
    
}

int main(void)
{
    char *str1;
    char str[]="123 456 789";
    *str1=substr(str,2);
    printf("str1 =%s\n",str1);
    return 0;
}

仿真调试,进入substr函数,发现str的值为“789”
可是最后又出同样的错

img

zara 06-04
  • 打赏
  • 举报
回复 1

str的定义方式不对吧,这样的模式会让字符串成为常量而不能被修改,可以试试 str[]="... 这样的形式;下面一行的 printf() 语句里 str1 前不应有 *

70,017

社区成员

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

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