【发布时间】:2013-07-17 02:05:59
【问题描述】:
有一个
typedef struct person {
char name[20]
char surname[20]
} person_t;
我需要创建一个类似XXXXXX:YYYYYY 的字符串,其函数如下
char* personToString(person_t *p)。我试着做到了:
char* personToString(person_t* p) {
int n1,n2;
n1=strlen(p->name);
n2=strlen(p->surname);
char *p = (char*) malloc((n1+n2+2)*sizeof(char));
strcat(p,puser->name);
strcat(p,":");
strcat(p,puser->surname);
return p;
}
这给了我一个合理的输出,但我在使用 valgrind 测试时遇到了一些错误!我也认为有一种更优雅的方法来编写函数!
【问题讨论】:
-
包括与问题相关的错误。
-
你可以用
sprintf代替strcat,比如sprintf(p, "%s:%s", p->name, p->surname);,加上你覆盖p,你把它作为参数,然后将它声明为char *而你没有@987654330 @你的char * -
sizeof(char)不是必需的,因为它总是1 -
不应该是
struct person *p而不是person_t,因为person_t是一个对象而不是typedef? -
我是 addinf 也是 char ':' 所以我想我需要 +2!我尝试 +1 并给我错误