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

时间:2021-09-13 16:36:56
 /*
     编写如下函数,不使用下标运算符,返回字符串str中字符c的个数
     (若不存在则为0)。
 */  

 #include <stdio.h>  

 int str_chnum(const char *str, char c)
 {
     ;  

     while (*str) {
         if (c == *str++)    n++;
     }
     return (n);
 }  

 int main(void)
 {
     ];
     char c;  

     printf("请输入字符串:");    scanf("%s", str);   

     getchar();                   // 清除缓存   

     printf("请输入要查找的字符:");    scanf("%c", &c);  

     printf("\n字符串\"%s\"中含有%d个字符\'%c\'。\n", str, str_chnum(str, c), c);  

     );
 }  
stack overflow现象,本人用的gcc版本为
gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)

  

 /*
     不使用下标运算符,写出与代码清单9-13中的str_toupper函数
     和str_tolower函数功能相同的函数。  

 */   

 #include <ctype.h>
 #include <stdio.h>    

 // 将字符串中的英文字符转换为大写字母
 void str_toupper(char *str)
 {
     while (*str)
         *str = toupper(*str++);
 }
 //使用valgrind后出现内存overflow

如果改成如下代码则正常

 char *str_toupper(char *str)
 {
     char *p = str;
     while(*str) {
         *str = toupper(*str);
         *str++;
     }
     return p;
 }