- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是一道练习题,我遇到了一些困难:
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 得到垃圾输出。我还确定 person
的 name
在调用 keepname 函数后确实是“Waterman”。我已经尝试将 person.name
取消引用到 person -> name
,通过消除 & 运算符和 malloc- 将问题从基于堆栈的问题更改为基于堆的问题结构,但没有任何效果。谁能引导我朝着正确的方向前进?提前谢谢你。
最佳答案
Is there an error?
struct bodytp // Is there an error?
{
char *name; // If so, fix the error.
int len;
};
不,没有错误。这是一个有效的结构定义。
现在错误接踵而至。:)
函数 main 应声明为
int main( void )
虽然这不是错误,但在函数调用之前最好有函数原型(prototype)
keepname(&person , "Waterman");
该程序具有未定义的行为,因为通过退出函数后将被销毁的局部数组的地址分配了指向结构的指针
void keepname(struct bodytp *onept, const char *last)
{
//...
char name[len+1];
//...
onept->name = name;
//...
}
有效函数可以这样定义
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;
}
在这种情况下,您必须释放 main 中分配的内存。
考虑到您可以在函数中使用标准 C 函数 strlen
和 strcpy
。
关于c - 练习题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343018/
这是一道练习题,我遇到了一些困难: struct bodytp // Is there an error? { char *name; // If so, fix the error.
所以,我目前正在阅读 Bjarne Stroustrup 的“编程:使用 C++ 的原理和实践”,我正在阅读第 3 章。书中有一个问题是“编写一个程序,提示用户输入 3 个字符串值,然后按逗号分隔的顺
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
题目:来自Madrid且订单数少于3的消费者 建表: 复制代码代码如下: set nocount on --当 SET NOCOUNT 为 ON 时,不返回
“OCP Java SE 6 程序员实践考试(考试 310-065)”评估测试 2 中的一道题。 给定: public class WeatherTest { static Weather w; pu
我是一名优秀的程序员,十分优秀!