首页 > 解决方案 > 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);

标签: c++pointerschar

解决方案


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 字符,而不是打印字符的数量(可能会出现这种情况)。遍历这个字符串会产生奇怪的值。一般来说,以后使用这个字符串会很麻烦。
现在它有点工作,但你可能应该真正删除字符,而不是仅仅用不可打印的字符替换它们。


推荐阅读