我继承了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.我没有正确地进行内存分配吗?
答案 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';
还有其他符合标准的替代方案,但你没有提出任何让我有理由认为其中一种替代方案更可取的方法。