C结构;克服将字符串传递给char

时间:2015-01-02 01:56:52

标签: c char structure

我正在尝试打印一个简单的结构,这不起作用,因为我试图将字符串传递给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;
}

3 个答案:

答案 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] ;

}