C程序值从1个字符更改为2个字符
我继承了一个C程序,我的C经验非常有限。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
这是当前存在的代码:
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';