为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确分配新的字符串值?

如何正确分配新的字符串值?

C C++
aluckdog 2019-06-20 15:47:25
如何正确分配新的字符串值?我试图理解如何以最干净/最安全的方式用C来解决这个琐碎的问题。下面是我的例子:#include <stdio.h>int main(int argc, char *argv[]){     typedef struct     {         char name[20];         char surname[20];         int unsigned age;     } person;     //Here i can pass strings as values...how does it works?     person p = {"John", "Doe",30};     printf("Name: %s; Age: %d\n",p.name,p.age);     // This works as expected...     p.age = 25;     //...but the same approach doesn't work with a string     p.name = "Jane";     printf("Name: %s; Age: %d\n",p.name,p.age);     return 1;}编译器的错误是:在函数‘main’中:main.c:18:错误:当从类型‘char*’分配给类型‘char[20]’时,不兼容类型我知道C(不是C+)没有字符串类型,而是使用字符数组,因此另一种方法是修改示例结构以保存字符的指针:#include <stdio.h>int main(int argc, char *argv[]){     typedef struct     {         char *name;         char *surname;         int unsigned age;     } person;     person p = {"John", "Doe",30};     printf("Name: %s; Age: %d\n",p.name,p.age);     p.age = 25;     p.name = "Jane";     printf("Name: %s; Age: %d\n",p.name,p.age);     return 1;}这如预期的那样有效,但我不知道是否有更好的方法来做到这一点。谢谢。
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

将字符串视为抽象对象,将char数组视为容器。字符串可以是任意大小的,但容器必须至少比字符串长度多1(以容纳空终止符)。

C对字符串的语法支持很少。没有字符串运算符(只有char-数组和char-指针运算符)。你不能分配字符串。

但是你可以调用函数来帮助你实现你想要的。

这个strncpy()函数可以在这里使用。为了最大限度的安全起见,我建议遵循以下模式:

strncpy(p.name, "Jane", 19);p.name[19] = '\0'; //add null terminator just in case

也请看一下strncat()memcpy()职能。


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 418 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信