一道极难的笔试题,我被鄙视的一塌糊涂,求高人指点
原题:
int main()
{
char str1[]="123";
char str2[]="123456789";
strcpy(str1,str2);
printf("str1:%s\n",str1);
return 0;
}
问:输出是神马?
我的答案:123456789,但是str1会有访问越界。
好了,面试官不屑对我说,是这样么,你好好想想大小端,堆栈吧,我又说了下大小端字节序:大头--低地址存高位;小头:低地址存低位。
面试官让我回来好好研究这道题的答案是神马,反正是答错了。然后跟我说西,西加加基础太差了,不符合要求。
求教大家了
我试了下加长度和减长度copy都会崩,char str1[10],char str2[10]这种预留空间的是可以成功的。
是不是在栈内存中像这种没有预留空间的字符串不允许截断或者增加长度,否则栈会崩?堆内存中就没有这种限制,但是很危险?
[解决办法]
没想明白跟大小端有啥关系
字符串翻转不用栈吧,直接翻转就可以
void reverseStr( char inputp[],int start,int end)
{
char *s = input + start;
char *e = input + end;
while ( s < e )
{
char tmp = *s;
*s = *e;
*e = tmp;
s++;
e--;
}
}
[解决办法]