C程序值从1个字符更改为2个字符

C程序值从1个字符更改为2个字符,c,C,我继承了一个C程序,我的C经验非常有限。 这是当前存在的代码: char *ptr ; if (data == 0) /* Buffer not acquired */ data = (char *)getmem(65535); ptr = data; /* create data record */ *ptr = '9'; 在这个过程的后面,它将这些信息转储到一个文本文件中 我需要数据显示双9 char *ptr ; if (data == 0) /* B

我继承了一个C程序,我的C经验非常有限。
这是当前存在的代码:

char *ptr ;
if (data == 0)  /* Buffer not acquired */
  data = (char *)getmem(65535);
ptr = data;  /* create data record */
*ptr = '9';             
在这个过程的后面,它将这些信息转储到一个文本文件中

我需要数据显示双9

char *ptr ;
if (data == 0)  /* Buffer not acquired */
  data = (char *)getmem(65535);
ptr = data;  /* create data record */
*ptr = '99';                

当输出信息时,它仍然只显示一个9。我没有正确地分配内存吗

您不应该在单引号中使用多个字符。如果您想要双倍99,在ptr,您应该:

*ptr = '9';
*(ptr+1) = '9';
代码

声明表达式
*ptr
具有类型
char
,或者,等价地,
ptr
是指向
char
的指针(因此具有类型
char*
)。如果为
*ptr
指定的
char
赋值,则设置一个char,因为赋值的左侧代表一个char

整数字符常量
'9'
对应于表示十进制数字
9
的字符。整数字符常量
'99'
也有效,但其含义由实现定义。您的特定实现显然对其进行了定义,以便将其转换为类型
char
的结果与将
'9'
转换为类型
char
的结果相同。但是,无论它是如何定义的,将其分配给
*ptr
只会修改
ptr
直接指向的一个
char
,而不会修改任何其他字符

设置
perr
指向的
char
值和下一个值的最简单方法是@EugeneSh.和另一个答案所建议的方法:

*ptr = '9'; *(ptr+1) = '9';

还有其他符合要求的替代方案,但您没有提出任何理由让我认为其中一个替代方案更可取。

您的编译器没有警告您
'99'
不是标准字符?如果没有,请认真提高您的警告级别。
strcpy(ptr,“99”)
也会在两个9后面放置一个空字符,而不使用
int*ptr
*ptr='9'*(ptr+1)=‘9’@WhozCraig:它是一个有效的多字符整数常量。问题是生成的
int
的布局是特定于实现的。我正在Visual Studio 2012中运行这个。我尝试了strcpy和sramij的建议,但仍然只显示了9。如果我加上ptr+=1;在sramij建议生效之后。“没有办法一起做2个9吗?”JerryWarra直接指派,没有。无论如何,不能随身携带。你可以
*ptr=*(ptr+1)='9',我想。当然,不要忘记终止。@JerryWarra,请注意
strcpy()
建议(即
strcpy(ptr,“99”)
)并不完全等同于一对单字符赋值,因为它还将编写字符串终止符。这可能是无害的,也可能不是无害的。谢谢约翰的解释。现在我觉得这更有道理了。谢谢大家的帮助。
*ptr = '9'; *(ptr+1) = '9';