如何为struct中的SELECT
t.id,
t.customerid,
t.price,
(SELECT
sum(price) FROM Table1
WHERE Id <= t.id) 'CalculatedTotal'
FROM Table t
HAVING CalculatedTotal <=200
字段分配内存?
我的结构:
char *
如何将malloc转移到 struct student{
int score;
char* name;
char* surname;
};
int main(){
struct student st[];
int i;
int n = 5;
for(i = 0; i < n; i++){
printf("Score: \n");
scanf("%d", &st[i].score);
printf("Name \n");
scanf("%s", &st[i].name);
printf("Surname \n");
scanf("%s",&st[i].surname)
}
}
和char* name
?
我必须有char* surname
形式的结构数组。
我不知道,这是怎么理性的。
struct student st[]
如何匹配?
答案 0 :(得分:3)
例如
#include <stdlib.h>
#include <string.h>
//...
struct student st[1];
char *name = "Marek";
char *surname = "Piszczaniuk";
st[0].name = malloc( strlen( name ) + 1 );
strcpy( st[0].name, name );
st[0].surname = malloc( strlen( surname ) + 1 );
strcpy( st[0].surname, surname );
st[0].score = 100;
您可以编写单独的函数来设置数组元素的数据成员名称和姓氏。
例如
_Bool set_name( struct student *st, const char *name )
{
st->name = malloc( strlen( name ) + 1 );
_Bool success = st->name != NULL;
if ( success )
{
strcpy( st->name, name );
}
return success;
}
答案 1 :(得分:0)
您需要编写一个initialise_student(struct student* s)
函数,在malloc
成员上调用char*
。也许这个函数也需要name
和surname
char* pointers
进行深层复制?
然后,您可以使用st
数组的每个成员调用此函数。
不要忘记构建相应的free_student(struct student* s)
功能。
答案 2 :(得分:0)
如果您已经在使用scanf
,则可以告诉该功能使用%ms
代替%s
为您分配刺痛,如下所示:
char *name;
if (scanf("%ms", &name) != 1) {
fprintf(stderr, "error: could not read name\n");
exit(1);
}
编辑这可能不是有效的解决方案 - 我忘了%ms
仅在POSIX中,而不是在ISO C中。