这段代码如何打印用户输入的最后一个词?

How does this code print the last word the user inputs?

这段小代码接受用户输入,return是用户输入的最后一个词。

我不太明白这两行代码是如何工作的

有人可以解释为什么或如何 printf( &last_word[i]); 当我在位置 0 时打印用户输入的句子的最后一个词。

该程序的目的是打印用户输入的最后一个字,但我不明白那几行代码,如果我更改那两行的某些内容,代码将停止工作并且不会 return 用户输入的最后一个词。

#include <stdio.h>

int main(){    
int i = 0;
char *last_word;
char str[800];
printf("enter:");
fgets(str,100,stdin);

while (str[i] != '[=10=]')    {    
    if (str[i] == ' ' && str[i + 1] > 32) 
        last_word = &str[i + 1]; 
    i++;                         
}

 /*------------------------these next lines of code-----------------------*/
 /*----->    i = 0; 
 /*----->    printf( &last_word[i]);


       return 0;
    }

神圣的未定义行为蝙蝠侠。

while 循环将 space 字符后的下一个字符的地址填充到 last_word 中;因此,如果有任何 space 个字符,它指向最后一个字符。

i = 0 因此 &last_word[i]last_word 相同。所以它使用最后一个词作为 printf 格式字符串。

但这与最后一个字不一样。试试这个输入:“%n%n%n%n%n%n%n%n”。再见。

printf 的第一个参数应该几乎总是一个常量。你要 printf("%s", last_word); 其实我们这么说吧;不向 printf 和朋友传递常量格式字符串的唯一原因是您的标准库太旧,无法支持 %*d 动态宽度。