C程序值从1到2个字符变化

时间:2016-10-12 17:39:57

标签: 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)  /* Buffer not acquired */
  data = (char *)getmem(65535);
ptr = data;  /* create data record */
*ptr = '99';                

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

2 个答案:

答案 0 :(得分:2)

你不应该用单引号做多字符。如果你想要双倍99,在ptr,你应该这样做:

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

答案 1 :(得分:2)

代码

char *ptr ;

声明表达式*ptr的类型为char,或者等效地,ptr是指向char的指针(因此类型为char * )。如果您为char指定的*ptr分配值,那么您可以设置一个字符,因为这是分配左侧所代表的内容。< / p>

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

设置ptr的{​​{1}}值的最简单方法是{@ 1}}点,下一个是@EugeneSh建议的值,还有另一个答案:

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

还有其他符合标准的替代方案,但你没有提出任何让我有理由认为其中一种替代方案更可取的方法。