c语言中细节注意(初级)

2017-01-14 19:43:51来源:cnblogs.com作者:斯世轻尘人点击

第七城市
 1 /*  2     编写如下函数,不使用下标运算符,返回字符串str中字符c的个数  3     (若不存在则为0)。   4 */   5    6 #include <stdio.h>   7    8 int str_chnum(const char *str, char c)   9 {  10     int n = 0;  11       12     while (*str) {  13         if (c == *str++)    n++;  14     }      15     return (n);  16 }  17   18 int main(void)  19 {  20     char str[100];  21     char c;  22       23     printf("请输入字符串:");    scanf("%s", str);   24       25     getchar();                   // 清除缓存   26       27     printf("请输入要查找的字符:");    scanf("%c", &c);  28       29     printf("/n字符串/"%s/"中含有%d个字符/'%c/'。/n", str, str_chnum(str, c), c);  30   31     return (0);      32 }  
 stack overflow现象,本人用的gcc版本为
gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) 

  

 1 /*  2     不使用下标运算符,写出与代码清单9-13中的str_toupper函数  3     和str_tolower函数功能相同的函数。   4      5 */    6    7 #include <ctype.h>     8 #include <stdio.h>     9     10 // 将字符串中的英文字符转换为大写字母    11 void str_toupper(char *str)    12 {    13     while (*str)  14         *str = toupper(*str++);       15 } 16 //使用valgrind后出现内存overflow

如果改成如下代码则正常

1 char *str_toupper(char *str)2 {3     char *p = str;4     while(*str) {5         *str = toupper(*str);6         *str++;7     }8     return p;9 }

 

第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台