关于c语言溢出程序的问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 01:27:29
溢出程序如下:
#include<stdio.h>
int main()
{
char output[8];

strcpy(output, name);

for(int i=0;i<8&&output[i];i++)

printf("\\0x%x",output[i]);

return 0;
}

我想请问:for(int i=0;i<8&&output[i];i++) 中的i<8&&output[i]是什么意思?和溢出有关系吗?
\\0x%x又是个什么意思?

char name[20]="123456789";
和溢出没有关系

i<8&&output[i]是表达式(逻辑运算),按运算符优先级,用括号括起来看就是:
(i<8) && output[i]
它是循环语句循环条件。当它为假时,循环终止。

这里的意思是,如果i小于8并且output[i]不为null ("\0" -- 字符串结束符)时做循环。 一旦 碰到 字符串结束符,或 i>=8 ,则 结束循环。

\\ -- 打印一个字符“反斜杠”,第一个斜杠告诉编译器“下一字符不做语法翻译和解释,按原字符处理”,第二个斜杠是被打印字符。
0x -- 打印字符 0x,16进制数的前缀符
%x -- 以16进制整数形式输出

和溢出没有关系吧!
它只是控制循环的,如果i>=8,或者output[i]为0,则结束循环。
"\\0x%x",表示打印的数以16进制表示,并在16进制数前加前缀"\0x".

你这个程序能编译过去么??
strcpy(output, name); 你的name定义呢??
strcpy(output, "name")到可以。
你问的那个严格来说和内存一处也有关系 output字符数组只分配了八个内存单元,如果没有i<8的话 printf语句会打印出非数组内的未知内容