| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 500 人关注过本帖
标题:为什么调试会出现这个错误
只看楼主 加入收藏
chenbingjy
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2025-6-2
结帖率:0
收藏
已结贴  问题点数:1 回复次数:5 
为什么调试会出现这个错误
代码:
#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;
}
调试
第一个for循环运行三次时,提示错误:
Thread 1 received signal SIGSEGV Segmentation fault
请问高手,如何解决?谢谢
搜索更多相关主题的帖子: char 调试 出现 错误 str 
2025-06-02 15:21
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1711
专家分:4386
注 册:2007-12-27
收藏
得分:1 
字符串这个东西有点麻烦。
主函数里你的str是一个指针,它所表示的那个字符串,在多数国内教材里叫做字符串常量。
常量的意思是不许修改。
然后你企图修改。
所以报错。
需要修改的话,主函数里用一个字符数组保存内容。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2025-06-02 18:13
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1711
专家分:4386
注 册:2007-12-27
收藏
得分:0 
另外应该是
str1=sub...
而不是
*str1=sub...

应该是
printf("...%s...",str1);

[此贴子已经被作者于2025-6-2 18:17编辑过]


对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2025-06-02 18:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9054
专家分:54256
注 册:2011-1-18
收藏
得分:1 
看不懂,连个题目或要求都没有
2025-06-02 19:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9054
专家分:54256
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

char* substr( const char* str, size_t n, size_t* len )
{
    const char* p = str;
    for( ; n!=0 && *p; ++p )
        n -= (*p==' ');

    *len = 0;
    for( ; p[*len]!=0 && p[*len]!=' '; ++*len );

    return (char*)p;
}

int main(void)
{
    const char* str = "123 456 789";
    const char* p;
    size_t len;

    p = substr( str, 0, &len );
    printf( "str0 = \"%.*s\"\n", (int)len, p );

    p = substr( str, 1, &len );
    printf( "str1 = \"%.*s\"\n", (int)len, p );

    p = substr( str, 2, &len );
    printf( "str2 = \"%.*s\"\n", (int)len, p );

    p = substr( str, 3, &len );
    printf( "str3 = \"%.*s\"\n", (int)len, p );

    p = substr( str, 4, &len );
    printf( "str4 = \"%.*s\"\n", (int)len, p );
}

输出
str0 = "123"
str1 = "456"
str2 = "789"
str3 = ""
str4 = ""



[此贴子已经被作者于2025-6-3 08:52编辑过]

2025-06-03 08:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9054
专家分:54256
注 册:2011-1-18
收藏
得分:0 
贴个C++的代码(虽然C++用在这里并没有任何优势)

程序代码:
#include <string>
#include <string_view>
#include <ranges>
#include <print>

std::string substr( std::string_view str, size_t n )
{
    return { std::from_range, *(str | std::views::split(' ') | std::views::drop(n) | std::views::take(1)).begin() };
}

int main( void )
{
    const char* str = "123 456 789";
    std::println( "str{} = \"{}\"", 0, substr(str,0) );
    std::println( "str{} = \"{}\"", 1, substr(str,1) );
    std::println( "str{} = \"{}\"", 2, substr(str,2) );
    std::println( "str{} = \"{}\"", 3, substr(str,3) );
    std::println( "str{} = \"{}\"", 4, substr(str,4) );
}


2025-06-03 09:20
快速回复:为什么调试会出现这个错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021291 second(s), 11 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved