这段小代码接受用户输入并返回用户输入的最后一个单词。
我不太明白这两行代码是如何工作的
有人可以解释为什么或如何 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/