今天遇到的面试题 呵呵呵呵 给大家分享一下
主考官说:你知道函数名 和 变量名 占多少字节吗 (变量名 不是内容)
我:但是还真蒙了,还从来没听说过,不知道是自己水平低,还是他的问题有问题,呵呵 应该是我的问题吧还真没有听说过
我在网上搜了 都没这个答案,呵呵在这里只能请问大家了
还有一段代码是:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
int main(){
char*src="hello,world";
char* dest=NULL;
int len=strlen(src);
dest=(char*)malloc(len);
char* d = dest;//
char* s = src[len];//这里有问题
while( len-- != 0 )
d++=s--;//这里也有问题,但不知道为什么
printf("%s",dest);//在这里 会出现乱码
return 0;
}
如果换成这样:
while( len-- != 0 )
d=s--;//这里也有问题,但不知道为什么
printf("%s",dest);//在这里 会出现乱码
printf("%s",d);//在这里不会出现乱码
dest和 d 不是指向的同一个地址空间吗 为什么会出现这样 请高手指教
[解决办法]
int main(int argc, char* argv[]){ char*src="hhello,world"; int len = strlen(src); char * dest =(char*)malloc(len+1); char* d = dest;// dest[len]='\0'; char* s; len--; s= src+len;//这里有问题 while( len >= 0 ){ *d++=*s--; len--; } //dest[3]='\0'; printf("%s %d\n",dest,len); return 0;}
[解决办法]
注意:
1、要给字符串的结尾'\0'分配空间:char * dest =(char*)malloc(len+1);
2、如果不执行len--,src[len]='\0';
3、char *s=src[len];//不正确,src[len]取得的是数组src在len位置存放的字符,而不是地址,应该是s=&src[len]或s=src+len
4、d++=s--;//不正确,这样写就成了地址运算了,而不是改变地址中的值
5、判断len!=0使src中src[0]这个字符未赋值给dest
[解决办法]
函数名和变量名在程序中应该是地址
[解决办法]
你没有考虑字符串结束符
[解决办法]
d为指向指针的指针
[解决办法]
函数名是一个地址,32位系统中是4个字节。
对于变量名,那要看是直接变量还是间接变量。
32位系统中,间接变量都是地址,自然是4个字节。直接变量要根本具体类型来确定了。
[解决办法]
我觉得这道题目出的挺好
[解决办法]
楼主的程序主要有以下几个方面的问题:
1、未考虑字符串结束符:为dest分配空间应该多分配一个字符:char * dest =(char*)malloc(len+1);
2、将一个字符(src[len],值为'\0',数字应该是0)赋值给一个地址,结果指针s指向地址0,应该先将len减掉1,让其偏移量指向一个实际字符(而不是'\0'),再将偏移地址赋值给指针s:
len--;s= src+len;或s=&src[len];
3、while(len-- != 0)使src字串首字符'h'的赋值被排出
4、d++=s--;将d的指向地址改变,而不是将指向地址中的值改变,这样实际dest指向的地址空间中的值未发生变化,为不可知的值。
5、不要忘记将dest最后一位设为'\0'。
正确的程序参照1楼代码。