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

标签 c string info

这段小代码接受用户输入并返回用户输入的最后一个单词。

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

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

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

#include <stdio.h>

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

while (str[i] != '\0')    {    
    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;
    }

最佳答案

神圣的未定义行为 bat 侠。

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

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

但这与最后一句话不同。试试这个输入:“%n%n%n%n%n%n%n%n”。再见。

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

关于c - 这段代码如何打印用户输入的最后一个词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57939716/

相关文章:

c - 如何检查C中字符串中的重复单词?

c# - 字符串 ToUpper() 函数与 ToString()

c - 在一个函数中比较 C 中的 Pascal 风格字符串和 C 风格字符串

c - printf 浮点值的字符串格式

c - 从命令行参数创建链表

另一个类 img :hover 上的 CSS 转换

php - 根据设备在子域上自动重定向

gdb - 在 gdb 中, 'where' 、 'bt' 和 'i frame' 命令之间有什么区别?

c - 计算数字总和的程序

C - 从输入文件中读取,将测试分数转换为字母等级,计算平均值,提取每个测试的最小值和最大值