这个代码为什么运行代码写不出来很烦

请各位高手帮我看一下这个代码为什么运行不出来?谢谢……(在线等)
[问题点数:20分]
请各位高手帮我看一下这个代码为什么运行不出来?谢谢……(在线等)
[问题点数:20分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2009年4月 总版技术专家分月排行榜第一
2009年11月 Linux/Unix社区大版内专家分月排行榜第一2009年6月 Linux/Unix社区大版内专家分月排行榜第一2009年4月 C/C++大版内专家分月排行榜第一2009年3月 C/C++大版内专家分月排行榜第一2009年3月 Linux/Unix社区大版内专家分月排行榜第一2009年2月 Linux/Unix社区大版内专家分月排行榜第一
匿名用户不能发表回复!|请问这个代码 为什么没办法运行_百度知道
请问这个代码 为什么没办法运行
请问这个代码 为什么没办法运行#include&stdio.h&
int main()
char a[10];
while((scanf(&%c&,&a[i]))!='\n')
a[i]='\0';
for(i=0,j;i&j;i++,j--)
if(a[i]!=a[j])
printf(&y\n&);
我有更好的答案
你while下是不是丢了一个大括号原来你丢了一大堆括号
不会不会。😱😱没有这行 😱😱。
实际上如果把那个while语句的scnaf改成getchar的 就对了。但是 我不知道为什么不能用scanf😱😱😱能告诉我为什么吗
那个while 是用在改变i而已。😁
输入数组有这么输入的方法吗?不是应当用for循环吗?
for(){a[i]=scanf(&%d&,&a)}
省略相关代码,你懂就行
有的。这个是书里的题。我把getchar改成 scanf 就错了。
那我不明白了😂你试下用循环输入数组的方法。我算是看明白了,你的while陷入死循环,哪怕是输入了回车,也只是i不加1而已,循环并没有跳出,应当这样修改while((scanf(&%c&,&a[i]))!='\n'){i++;}
我算是看明白了,你的while陷入死循环,哪怕是输入了回车,也只是i不加1而已,循环并没有跳出,应当这样修改while((scanf(&%c&,&a[i]))!='\n'){i++;}
反正你懂这个意思就行
如果输入回车break
while((scanf(&%c&,&a[i]))){if(a[i]==&\n&){}
好。谢谢哈
采纳率:43%
来自团队:
缺少,还有这边的是个什么玩意,乱七八糟
请问缺什么😳
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。111被浏览36,408分享邀请回答2917 条评论分享收藏感谢收起char arr[8] = "haha+1s";
然后在文件foo2.cpp有如下声明extern char *arr;
并在这个文件中尝试打印这个字符数组#include &iostream&
extern char *arr;
int main(int argc, char *argv[])
std::cout && arr && std::endl;
编译并运行:unix$ clang++ -o foo foo1.cpp foo2.cpp
unix$ ./foo
编译和链接能正常通过,但是运行的时候会发生什么?答案是:段错误。广受吐槽的某国内教科书《C语言程序设计》中完全不区分数组名和指针的概念,就会导致一些初学者在实际中遇到这种诡异的“段错误”。实际上这个错误很好解释,编译器在编译foo1.cpp时,_arr作为符号表中的一个符号,记录了那个全局数组的首地址。以运行在x86_64的64位模式下的程序为例,arr被编译成如下的形式_arr:
.asciz "haha+1s"
然而,在foo2.cpp中,arr却是作为一个全局指针变量进行声明。编译和链接不会出问题,但是在运行的时候,就会出问题。例如,当程序需要取arr[0]的值时,首先,程序认为arr是一个指针,就从符号_arr对应的地址开始取出一个8字节整数(64位系统),显然这个整数是:0x68 61 68 61 2B 31 73 00
(不明白可以man ascii查一下ascii码表:'\0' =& 0x00, 's' =& 0x73, '1' =& 0x31, '+' =& 0x2b, 'a' =& 0x61, 'h' =& 0x68)此时,指针的值为arr = (char*)0x7300;
接下来需要取arr所指向一个字节的内容,CPU就把上面这64bit放在地址线上去寻址。假设需要把arr[0]的值放入寄存器bl,上面叙述的过程大概是这样的mov rax, quad ptr [rip + _arr]
mov bl, byte ptr [rax]
此时问题就发生了,明明是8个字符对应的值拼成的一个8字节整数,却被强行解释成了一个地址,谁知道这个未知的地址存的是什么呢?于是“段错误”就可能出现。所以符号和全局指针变量并不是等同的。题主的问题很类似这个问题。事实上main函数并不是程序真正的入口,真正的入口在Runtime中定义,以x86_64的Darwin为例,查一下Runtime的符号表:darwin@macbook:~$ nm /usr/lib/crt1.o
0170 s EH_Frame1
012a s LC1
012b s LC2
0158 s LC3
01c8 S _NXArgc
01d0 S _NXArgv
U ___dso_handle
U ___keymgr_dwarf2_register_sections
01e0 S ___progname
U __cthread_init_routine
0124 T __dyld_func_lookup
0022 T __start
01d8 S _environ
U _mach_init_routine
0110 T dyld_stub_binding_helper
0188 s func.eh
0000 T start
程序开始执行的地方是start,Linux中是_start,start过程调用了_main过程。既然是标准的函数调用过程,_main必须是一个函数入口点地址的符号,而非一个全局指针变量的符号,_main过程被调用的过程大概是这样子的:mov edi, argc
lea esi, [argv]
call _main
然而如果main是一个函数指针就不一样了,如果要正确执行main指针指向的函数代码,首先需要对main解引用取得它指向的函数地址,再压栈程序计数器(rip)并跳转到目标地址,大概过程是这样的:mov edi, argc
lea esi, [argv]
call qword ptr [rip + _main]
事实上Runtime总是按call _main这样的方式来调用_main过程的,因为它并不知道_main符号到底是函数入口还是指向函数入口的指针。假设在自己的程序中_main被声明为一个全局函数指针变量,则必须通过 qword ptr [rip + _main]这样的解引用操作才能正确执行_main所指向过程的代码,然而没有解引用的_main符号并不对应所指向函数的代码,而是对应这段代码的入口地址,这样一个未知的地址值如果视为代码,则显然是一段未知的代码。举个例子,假设main这个指针的值是0xCCCC CCCC CCCC CCCC,也就是说函数的入口地址是这一串C,可是用户文件的main却被编译成_main:
.quad 0xCCCCCCCCCCCCCCCC
用户的本意是,rip压栈后跳转到上面这一串C对应的地址,结果call _main的结果是跳转到了“存储”这一串C的地址。跳转之后,本来是地址值的数据强行被解释成一系列的int 3指令(调试中断)。即使编译和链接通过了,代码也会跳转到一个未知的地方并开始执行执行未知的代码,或者发生段错误。然而因为main函数的特殊性,所以标准强制规定了main不得作为一个全局变量,因此将main赋值为函数指针或者函数对象(特指 C++ 11 std::function)都是有问题的。事实上这样的代码连编译阶段也无法通过。评论区的一些朋友可能不太熟悉GAS的伪指令,这里简单说一下,“标号: .asciz 字符串”这样的形式意思是在这个标号处依次存储后面字符串的每个字符对应的值,然后以结束符0x00填充在末尾。比如_arr:
.asciz "haha+1s"
在GAS汇编器编译之后会在目标文件的某个位置依次写入字节序列0x68 0x61 0x68 0x61 0x2B 0x31 0x73 0x00
然后在目标文件的符号表中写入条目_arr, 对应的值为首字节0x68相对某个地址的偏移量。.quad 与此类似,意思是在这个标号处存储一个8字节整型变量,编译为目标文件时,会依次在目标文件的某个位置按低位至高位的字节序写入8字节,并在符号表中创建标号的条目。12430 条评论分享收藏感谢收起我这个代码为什么不能运行??_百度知道
我这个代码为什么不能运行??
&!DOCTYPE html PUBLIC &-//W3C//DTD XHTML 1.0 Transitional//EN& &http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&&
&html xmlns=&http://www.w3.org/1999/xhtml&&
&meta http-equiv=&Content-Type& content=&text/...
我有更好的答案
&&#47.display='block'
aDiv[i];script&gt
采纳率:34%
你试一下不就知道了吗,为什么要问呢?
你是煞笔吗
你是傻逼吧,谁能看出来对不对,那么多东西还有图片什么的。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 微场景用代码打出来的 的文章

 

随机推荐