首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >练习试题

练习试题
EN

Stack Overflow用户
提问于 2014-10-13 15:00:24
回答 2查看 182关注 0票数 0

这是一个练习试题,我有一些困难:

代码语言:javascript
复制
struct bodytp // Is there an error?
{
    char *name; // If so, fix the error.
    int len;
};

main()  
{
      struct bodytp person;
      keepname(&person , "Waterman");
      printf("%s\n", person.name); 
}

void keepname(struct bodytp *onept, const char *last)
{
    int len;
    char *tpt;
    for ( len = 0; last[len] != '\0'; )
    len++;
    char name[len+1];
    for ( tpt = name; *tpt++ = *last++; )
    ;
    onept->name = name;
    onept->len = len;
}

我已经确定有一个错误,因为当我运行它时,我从printf获得垃圾输出。我还认定,personname确实是“沃特曼”,是在记事本函数调用之后。我尝试过将person.name取消为person -> name,通过消除符号和运算符以及malloc结构,将问题从基于堆栈的问题更改为基于堆的问题,但没有任何效果。有人能引导我朝着正确的方向前进吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-13 15:20:40

有错误吗?

代码语言:javascript
复制
struct bodytp // Is there an error?
{
    char *name; // If so, fix the error.
    int len;

};

不没有错误。它是一个有效的结构定义。

现在出现错误。:)

主要功能须声明为

代码语言:javascript
复制
int main( void )

尽管这不是一个错误,但最好在函数调用之前有一个函数原型。

代码语言:javascript
复制
keepname(&person , "Waterman");

程序具有未定义的行为,因为通过本地数组的地址分配指向结构的指针,该指针在退出函数后将被销毁。

代码语言:javascript
复制
void keepname(struct bodytp *onept, const char *last)
{
    //...
    char name[len+1];
    //...
    onept->name = name;
    //...
}

有效的函数可以定义如下

代码语言:javascript
复制
void keepname(struct bodytp *onept, const char *last)
{
    int len = 0;
    char *tpt;

    while ( last[len] != '\0' ) len++;

    char *name = malloc( len + 1 );

    for ( tpt = name; *tpt++ = *last++; ) ;

    onept->name = name;
    onept->len = len;
}

在这种情况下,您必须释放主内存。

考虑到您可以在函数中使用标准C函数strlenstrcpy

票数 2
EN

Stack Overflow用户

发布于 2014-10-13 15:17:19

您需要为堆中的名称分配内存。

代码语言:javascript
复制
void keepname(struct bodytp *onept, const char *last)
{
    int len;
    char *tpt;
    for ( len = 0; last[len] != '\0';len++);
    char *name=malloc(len+1);
    onept->name = name;
    onept->len = len;
    for ( ; *name++ = *last++ ; ); 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26343018

复制
相关文章

相似问题

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