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

C structure; overcoming passing a string to a 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;
}

首先,您要声明一个指向 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] = '[=10=]';    
    print(mydata);
    free(mydata);
    return 0;
}
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);

你也可以这样做。但是,如果您有可以为您完成这项工作的功能,为什么还需要其他方法。

char mydescription[]="Wall Street Journal\n";
int count =0 ;

for( count =0 ; mydescription[count] != '[=10=]' ; count++)
{
    mydata->description[count] = mydescription[count] ;

}