如何使用char*作为char []

phu*_*ehe 2 c arrays string pointers

我有这样的结构

typedef struct bookStruct
{
   char title[80];
   char author[80];
} BookType;
Run Code Online (Sandbox Code Playgroud)

我有两个像这样的字符串

char *title = "A Book on C";
char *author = "A. Kelly";
Run Code Online (Sandbox Code Playgroud)

现在我不能创建BookType这样的

BookType book = {title, author};
Run Code Online (Sandbox Code Playgroud)

谁能告诉我有什么问题?我怎样才能做到这一点?

Dav*_*eas 6

您的问题有两种可能的解决方案.第一个是在构造位置使用字符串文字:

BookType book = { "A book on C", "A. Kelly" };
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器会将文字复制到适当的变量.如果您无法在初始化中使用文字,则必须自己复制元素:

BookType book = { 0 }; // 0 initalize
strncpy( book.title, title, sizeof(book.title)-1 );   
strncpy( book.author, author, sizeof(book.author)-1 );
Run Code Online (Sandbox Code Playgroud)

  • 哇,这是毫无意义地坚持宗教信仰的最终例子,即strncpy比strcpy更"安全".或者可能是一个简单的"思考".使用`sizeof(book.title)-1`作为限制,或使用strlcpy:你的代码在任何意义上都没有"确保大小适合":-) (3认同)