重学c语言,程序出问题了,请帮忙看看!

许文强 发布于 2013/02/07 22:29
阅读 473
收藏 0
#include<stdio.h>
#include<string.h>
int binsearch(int v[], int n, int x);
void reverse(char *s1);
void itoa(char *s2, int n);
int strlens(char *s);
int strlens(char *s)
{
int n;
for (n = 0; *s != '\0'; s++)
n ++;
return n;
}
void itoa(char *s2, int n)
{
int i = 0, sign = 0;
if ((sign = n) < 0)
n = -n;
do {
s2[i++] = n % 10 + '0';
} while ((n = n/10) > 0);
if (sign < 0)
s2[i++] = '-';
s2[i++] = '\0';
//reverse(s2);
}
void reverse(char *s1) 
{
int c = 0, i = 0, j = 0;
for (i = 0, j = strlen(s1) - 1; i < j; i++, j--)
{
c = s1[i];
s1[i] = s1[j];
s1[j] = c;
}
}
int binsearch(int v[], int n, int x)
{
int low = 0, high = n - 1, mid = 0;
while (low <= high)
{
mid = (low + high)/2;
if (x < v[mid])
high = mid -1;
else if (x > v[mid])
low = mid + 1;
else 
return mid;
}
return -1;
}
int main()
{

char sk[] = "445645363547";
printf("%s\n", sk);
char ss[] = "";
printf("%s\n", sk);
int n = 23243;
itoa(ss, n);
printf("%s\n", ss);


printf("%s\n", sk);
printf("%d\n", strlens(sk));
return 0;
}



输出为:

445645363547
445645363547
34232
4232
4

如果char ss[] = "";在char sk[] = "445645363547";之前,

程序就正确,不知道为什么。

加载中
0
leo108
leo108

char ss[] = "";

ss数组长度是1,后面对ss的处理,明显是溢出了,影响到其他变量(sk)是很正常的

0
汉克斯
汉克斯
char *sk = "445645363547"; 
0
Padding
Padding
有个if语句错了,成赋值了,下边的就没再看
Padding
Padding
sorry,我说的不对,嘿嘿,幸亏又看一眼
0
中山野鬼
中山野鬼
一楼是对的,楼主你要高清楚放在堆栈的变量的拜访顺序,这样你就牛B的可以使用不可控的存储区域了。哈哈。
yuwen001
yuwen001
啊啊啊
寂寞沙洲
寂寞沙洲
写木马的节奏么
0
疯狂的流浪
疯狂的流浪
我也在学,这是二叉搜索吧,我感觉一用结构体程序就喜欢提示错,郁闷
0
OverTime
OverTime
一楼正解。。。
返回顶部
顶部