Code Bye

C文件处理时出了个小BUG求帮忙

void  capitalization(FILE *p)
{
char array[100] = { 0 };
char str[100] = { 0 };
while (!feof(p))
{
fgets(array, sizeof(array), p);
for (int i = 0; i < strlen(array); i++)
{
if ((isalpha(array[i])))
{
str[i] = toupper(array[i]);
}
else
{
str[i] = array[i];
}
}
printf(“%s”, str);
}
}
;
循环一次就谈出来!可以点忽略,但是不清楚为什么会这样,找不到原因 求帮看看!
解决方案

10

其实本人也遇到过这个问题,可能是微软库的bug吧。isalpha((unsigned char)array[i])
应该就可以了。应该是你传入的字符有非ASCII字符,所以超过了127。由于MS的实现char是signed的。所以就整形提升以后就成了负数了。

10

点重试——中断,断下后通过调用堆栈、变量窗口观察分析原因

20

 1   #include <stdio.h>                                                                                                                                                                                     
    1 #include <ctype.h>
    2 #include <string.h>
    3  
    4 void  capitalization(FILE *p);
    5  
    6 int main(void)
    7 {
    8     FILE *fp = fopen("1.txt", "r");
    9     if (NULL == fp) {
   10     |   fprintf(stderr, "Open %s Error", "1.txt");
   11     |   return -1;
   12     }
   13     capitalization(fp);
   14     return 0;
   15 }
   16  
   17  
   18  
   19  
   20 void  capitalization(FILE *p)
   21 {
   22     int i;
   23     char array[100] = { 0 };
   24     char str[100] = { 0 };
   25  
   26     while (!feof(p))
   27     {
   28     |   fgets(array, sizeof(array), p);
>> 29     |   for (i = 0; i < strlen(array); i++)
   30     |   {
   31     |   |   if ((isalpha(array[i])))
   32     |   |   {
   33     |   |   |   str[i] = toupper(array[i]);
   34     |   |   }
   35     |   else
   36     |   {
   37     |   |   str[i] = array[i];
   38     |   }
   39     }
   40     printf("%s", str);
   41     }
   42 }

在Linux下测试了一下你的代码,没发现问题;本人打开的文件里的数据要么是26个英文字符,要么是数字;可以将字母小写变大写,其他不变;
建议题主查看一下要打开的文件;


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C文件处理时出了个小BUG求帮忙