溢出程序示例
时间:2010-10-14 来源:aaron_xueli
程序如下:
1 #include <stdio.h>
2 #include <string.h>
3
4 char *upcase(char *inputstring, char *newstring);
5
6 int main(void)
7 {
8 char str1[4];
9 upcase("Hello", str1);
10 printf("str1= %s\n", str1);
11 return 0;
12 }
13
14 char *upcase(char *inputstring, char *newstring)
15 {
16 int counter;
17 strncpy(newstring, inputstring, sizeof(newstring)-1);
18 for(counter = 0; counter < strlen(newstring)-1; counter++)
19 {
20 if (newstring[counter] >= 97 && newstring[counter] <= 122)
21 {
22 newstring[counter] -= 32;
23 }
24 *(newstring+strlen(newstring)) = 0x00;
25 return (char *)newstring;
26 }
27 }
在这个程序中,字符串str1和str2的长度故意设置得很小。当实际输入的字符串的长度大于字符串所限制的长度时, 超出的部分将被截取。这一方法虽然可以避免溢出,但会导致数据的丢失,更好的方法是使用动态内存或链表来保存数据。
1 #include <stdio.h>
2 #include <string.h>
3
4 char *upcase(char *inputstring, char *newstring);
5
6 int main(void)
7 {
8 char str1[4];
9 upcase("Hello", str1);
10 printf("str1= %s\n", str1);
11 return 0;
12 }
13
14 char *upcase(char *inputstring, char *newstring)
15 {
16 int counter;
17 strncpy(newstring, inputstring, sizeof(newstring)-1);
18 for(counter = 0; counter < strlen(newstring)-1; counter++)
19 {
20 if (newstring[counter] >= 97 && newstring[counter] <= 122)
21 {
22 newstring[counter] -= 32;
23 }
24 *(newstring+strlen(newstring)) = 0x00;
25 return (char *)newstring;
26 }
27 }
在这个程序中,字符串str1和str2的长度故意设置得很小。当实际输入的字符串的长度大于字符串所限制的长度时, 超出的部分将被截取。这一方法虽然可以避免溢出,但会导致数据的丢失,更好的方法是使用动态内存或链表来保存数据。
相关阅读 更多 +