首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确初始化字符串

如何正确初始化字符串
EN

Stack Overflow用户
提问于 2011-07-27 03:34:17
回答 6查看 964关注 0票数 1

我该如何为下面的函数定义下面的字符串?

到目前为止,我得到了警告:

C4047: '=' : 'const char' differs in levels of indirection from 'char [4]'

以及错误:

C2166: l-value specifies const object.

都在下面代码的第三行中:

代码语言:javascript
复制
uint8_t *buffer= (uint8_t *) malloc(sizeof(uint32_t));
const char *stringaling= (const char *) malloc(sizeof(uint32_t));
*stringaling = "fun";
newval = protobuf_writeString (buffer, stringaling);

uint32_t protobuf_writeString(uint8_t *out,const char * str)
{

      if (str == NULL)
      {
          out[0] = 0;
          return 1;
      }
      else
      {
          size_t len = strlen (str);
          size_t rv = uint32_pack (len, out);
          memcpy (out + rv, str, len);
          return rv + len;
      }
}
EN

回答 6

Stack Overflow用户

发布于 2011-07-27 03:41:28

代码语言:javascript
复制
const char *stringaling= (const char *) malloc(sizeof(uint32_t));
*stringaling = "fun";

这不是有效代码。您正在尝试为常量变量赋值,这是非法的。然后,您尝试将一个字符数组分配给一个字符。最后,即使您有一个大小合适的非常数组字符,您仍然不能给数组赋值,因为它们不是一等值。

票数 4
EN

Stack Overflow用户

发布于 2011-07-27 03:42:09

尝试使用

代码语言:javascript
复制
char *stringaling = malloc(sizeof(uint32_t));
strcpy(stringaling, "fun");

...instead,看看这是不是工作得更好。然而,请注意,(至少通常情况下) sizeof(uint32_t)恰好是适合“有趣”的大小,这几乎是偶然的。你通常不会想这么做的。

或者,您可能需要:

代码语言:javascript
复制
char const *stringaling = "fun";

或者:

代码语言:javascript
复制
char stringaling[] = "fun";

但是,您的赋值不会起作用-- C对语言中内置的字符串的支持非常少;大多数操作(包括复制字符串)通常都是通过库函数(如strcpy )完成的。

票数 2
EN

Stack Overflow用户

发布于 2011-07-27 03:42:23

"fun"是一个字符串文字,它本质上是一个const char *

stringaling也是一个const char *,所以您的第三行代码试图将一个const char *分配给一个const char,这是不可能实现的。

如果它是一个常量字符串,你可以这样做:

代码语言:javascript
复制
const char *stringaling = "fun";

如果你的输入字符串是动态的,你可以这样做:

代码语言:javascript
复制
char *stringaling= (char *) malloc(strlen(inputString)+1);
strcpy(stringaling, inputString);

显然,如果你恶意锁定它,你需要释放它,或者感受到内存泄漏的愤怒。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6835488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档