这是代码,这将输出正确的答案。
#define MAXSIZE 100
typedef struct {
int ISBN[13];
}Book;
int main() {
Book BookList;
strcpy(BookList.ISBN, "9780133432398");
printf("ISBN of the book: %s\n", BookList.ISBN);
return 0;
}
而且,gcc表示有警告:
warning: format '%s' expects argument of type 'char *', but argument 2 has type 'int *' [-Wformat=]
因此,我像这样更改BookList.ISBN
:BookList.ISBN = "9780133432398";
但随后gcc输出此错误:
error: assignment to expression with array type
只是想不通...
答案 0 :(得分:2)
使用strcpy()
并不是问题(而是正确的做法),请检查类型,这就是编译器在抱怨的问题。
ISBN
数组中的int
变量实际上应该是char
s数组。
也就是说,要使char
数组被限定为 string ,它必须以空字符终止。要保留该空字符,您需要在实际内容上方留出另一个char
的空间。
因此,要保留13个字符的输入,数组的长度至少应为14。
您需要更改
typedef struct {
int ISBN[13];
}Book;
到
#define BNSIZE 14 // easy configuration
typedef struct {
char ISBN[BNSIZE];
}Book;
答案 1 :(得分:0)
虽然您可以像其他人建议的那样将ISBN更改为char[]
,但我发现使用字符串来保存数字很奇怪。相反,我会选择一个无符号整数类型,该类型可以容纳足够的数字以适合13位ISBN。
#include <stdint.h>
#include <inttypes.h>
typedef struct {
uint_least64_t ISBN;
}Book;
int main() {
Book BookList = {.ISBN=9780133432398};
printf("ISBN of the book: %" PRIuLEAST64 "\n", BookList.ISBN);
return 0;
}