2015-01-02 38 views
1

我想打印一個簡單的結構,這不起作用,因爲我想傳遞一個字符串到一個字符(我知道這是非法的)。但我無法弄清楚如何克服這一點。我知道有一種strcpy和沒有strcpy的方法,我該如何解決這個問題?我搜索了論壇,發現了類似的問題,但無法將它們應用於我的問題。C結構;克服傳遞一個字符串到字符

#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
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); 
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; 
} 
+0

爲什麼不使用'strcpy'? – immibis

1

你也可以做到這一點。但是,如果你有一個可以爲你完成工作的功能,你爲什麼還需要其他方法?

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

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

}