【问题标题】:String in c "Hello world"?c“Hello world”中的字符串?
【发布时间】:2020-05-02 04:45:32
【问题描述】:

我不明白第 5 行中“单词”这个词是如何打印的。有人可以解释一下吗?

    #include <stdio.h>
    int main(void) {
        char str[50] = "hello\0 worl\bd";
        printf("\n %s ",str);
        printf("%s \n",str+str[4]-*str);
        return 0;
    }

【问题讨论】:

标签: c string obfuscation


【解决方案1】:

所以,一步一步:

  • "str"指向你的字符串"hello\0 worl\bd",其实就是"hello\0 word"(因为\b删除了前一个字符)

  • *str = 是 char 指针的“内容”,表示字符串的第一个字符,即“h”

  • str[4] =是str的第(4+1)个字符,即'o'

  • str[4] - *str = 'o'-'h' = 7 (但为什么是 7?'h' 的 ASCII 字符值为 104 和 'o'值为 111)

  • str + 7 = str[7]


因此,您基本上是从初始字符串的 index:7 开始打印字符串。

因此:'word' ;)

【讨论】:

    【解决方案2】:

    首先是下面的字符串:

     0 => h
     1 => e
     2 => l
     3 => l
     4 => o
     5 => \0
     6 => (space bar)
     7 => w
     8 => o
     9 => r
    10 => l
    11 => \b
    12 => d
    

    现在你的命令是:

    printf("%s \n",str+str[4]-*str);
    

    C做了以下事情

     str => point of starting printing
    
     str[4] as above is o
    
     *str as above is h
    
     Thus o - h = 7 [i.e. ascii value 111 - 104]
    
     printing would starting from character 7 i.e. [str+7]
    

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 2012-05-10
      • 2016-04-05
      • 2022-01-10
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多