首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C语言中字符串复制中的分段

C语言中字符串复制中的分段
EN

Stack Overflow用户
提问于 2016-08-10 12:57:32
回答 1查看 104关注 0票数 2

我在下面的while循环中获取segmentation fault

代码语言:javascript
运行
复制
int main() {
    register char *str = "Hello World";
    char *ans;
    ans = test(str);
    if(!ans)
        return 1;
    free(ans);
    return 0;
}
char *test(char *str) {

         char *str1 ;
         char *str2;
         char *str3;
         str1 = malloc(strlen(str) + 5);
         str2 = str;
         str3 = str1;
         *str3++ = '\b';
         *str3++ = '\b';
         while(*str2)
             *str3++ = *str2++;
         *str3++ = '\f';
         *str3++ = '\f';
         *str3 = '\0';
         return (str1);
}

我想我在while循环中得到了segmentation fault。你能告诉我为什么吗?我将其称为char *ans = test(string),其中stringregister char *string。比方说,字符串中有hello world。我的目的是从test()返回\b\bHello World\f\f

EN

回答 1

Stack Overflow用户

发布于 2016-08-10 15:00:29

您的问题是没有正确地声明函数test。您必须在使用之前声明所使用的每个函数,无论是通过将实际函数放在上面还是编写函数声明。

一旦你这样做了,你的代码就可以工作了:

代码语言:javascript
运行
复制
#include <stdio.h>
char *test (char *str); // this is the function declaration
int main(void) {
    register char *str = "Hello World";
    char *ans;
    ans = test(str);
    if(!ans)
        return 1;
    free(ans);
    return 0;
}
char *test(char *str) {

         char *str1 ;
         char *str2;
         char *str3;
         str1 = malloc(strlen(str) + 5);
         str2 = str;
         str3 = str1;
         *str3++ = '\b';
         *str3++ = '\b';
         while(*str2)
             *str3++ = *str2++;
         *str3++ = '\f';
         *str3++ = '\f';
         *str3 = '\0';
         return (str1);
}

演示:https://ideone.com/HIXyMs

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38864558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档