c++ - char *p = int 有什么作用?C++
问题描述
我玩了一点字符串,遇到了这样的情况,想法是删除单词 s2 中的空格,然后我只输入数字 1 就可以了。我不清楚为什么。这里发生了什么,记忆中发生了什么?这真的是一个很好的解决方案吗?
char s2[]= " wo rl d";
char *h = s2;
while(*h != '\0'){
if(*h == ' '){
*h=1;
}
h++;
}
printf("%s",s2);
解决方案
1
在 ASCII 表中是不可打印的字符(标题开头 - SOH)。打印时,您的程序将跳过那些(好吧,可能 - ASCII 在任何 C++ 程序中都不能保证)。
记忆中发生了什么?
在记忆中,你仍然1
在每个地方都有那些。
它看起来像这样:
1 119 111 1 114 108 1 1 100 0 // decimal values, assuming ASCII
SOH w o SOH r l SOH SOH d NUL // char representations
这真的是一个很好的解决方案吗?
并不真地。char1
在某些系统上的打印方式可能不同。strlen()
将返回完整长度的字符串,包括那些 SOH 字符,而不是打印字符的数量(可能会出现这种情况)。遍历这个字符串会产生奇怪的值。一般来说,以后使用这个字符串会很麻烦。
现在它有点工作,但你可能应该真正删除字符,而不是仅仅用不可打印的字符替换它们。
推荐阅读
- python - 如何从外部函数获取参数?Python
- c++ - 具有不同数量参数的函数中的 C++ 代码重复
- laravel - Laravel:用户在会话到期之前被注销
- sdk - Genexus Extensions SDK - 我在哪里可以找到可用的菜单上下文字符串?
- json - 解析 JSON 错误无法读取未定义的属性“url”
- python - 在 Pandas 中按顺序重命名重复的列名
- r - 将带有月份编号的日期转换为带有月份缩写的日期?
- html - 如何在两个 iframe 之间创建通信?
- mongodb - mongodb 在身份验证启用模式下不要求身份验证
- python - --all 标志对 conda env 删除有什么作用?