我正在尝试打印一个简单的结构,这不起作用,因为我试图将字符串传递给char(我知道这是非法的)。但我无法弄清楚如何克服这个问题。我知道有一种strcpy和没有strcpy的方式,我怎么能纠正这个?我搜索了论坛并找到了类似的问题,但无法将它们应用到我的问题中。
#include <stdio.h>
struct article
{
int number;
int quantity;
char description[21];
};
void print(struct article *p)
{
printf("Article Number: %d\nQuantity: %d\nDescription: %s", p->number, p->quantity, p->description);
}
int main()
{
struct article *mydata;
mydata->number = 333;
mydata->quantity = 465;
mydata->description = "Wall Street Journal\n";
print(mydata);
return 0;
}
答案 0 :(得分:3)
struct article mydata = {
333,
465,
"Wall Street Journal\n"
};
print(&mydata);
struct article mydata;
mydata.number = 333;
mydata.quantity = 465;
strcpy(mydata.description, "Wall Street Journal\n");
print(&mydata);
答案 1 :(得分:2)
首先,您要声明指向struct article
的指针。您需要为该指针分配内存。它不会自动为您分配。使用malloc
将动态内存分配给堆。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
struct article *mydata = malloc(sizeof(struct article));
if(article == NULL) {
exit(1);
}
mydata->number = 333;
mydata->quantity = 465;
char *description = "Wall Street Journal\n";
size_t len = strlen(description);
memcpy(mydata->description, description, len);
mydata->description[len] = '\0';
print(mydata);
free(mydata);
return 0;
}
答案 2 :(得分:1)
您也可以这样做。但是,如果你有一个可以为你完成工作的功能,为什么还需要其他方法。
char mydescription[]="Wall Street Journal\n";
int count =0 ;
for( count =0 ; mydescription[count] != '\0' ; count++)
{
mydata->description[count] = mydescription[count] ;
}