我该如何为下面的函数定义下面的字符串?
到目前为止,我得到了警告:
C4047: '=' : 'const char' differs in levels of indirection from 'char [4]'
以及错误:
C2166: l-value specifies const object.
都在下面代码的第三行中:
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;
}
}发布于 2011-07-27 03:41:28
const char *stringaling= (const char *) malloc(sizeof(uint32_t));
*stringaling = "fun";这不是有效代码。您正在尝试为常量变量赋值,这是非法的。然后,您尝试将一个字符数组分配给一个字符。最后,即使您有一个大小合适的非常数组字符,您仍然不能给数组赋值,因为它们不是一等值。
发布于 2011-07-27 03:42:09
尝试使用
char *stringaling = malloc(sizeof(uint32_t));
strcpy(stringaling, "fun");...instead,看看这是不是工作得更好。然而,请注意,(至少通常情况下) sizeof(uint32_t)恰好是适合“有趣”的大小,这几乎是偶然的。你通常不会想这么做的。
或者,您可能需要:
char const *stringaling = "fun";或者:
char stringaling[] = "fun";但是,您的赋值不会起作用-- C对语言中内置的字符串的支持非常少;大多数操作(包括复制字符串)通常都是通过库函数(如strcpy )完成的。
发布于 2011-07-27 03:42:23
"fun"是一个字符串文字,它本质上是一个const char *。
stringaling也是一个const char *,所以您的第三行代码试图将一个const char *分配给一个const char,这是不可能实现的。
如果它是一个常量字符串,你可以这样做:
const char *stringaling = "fun";如果你的输入字符串是动态的,你可以这样做:
char *stringaling= (char *) malloc(strlen(inputString)+1);
strcpy(stringaling, inputString);显然,如果你恶意锁定它,你需要释放它,或者感受到内存泄漏的愤怒。
https://stackoverflow.com/questions/6835488
复制相似问题