回 帖 发 新 帖 刷新版面

主题:求助!

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define BUFSIZE 1024
int main(int argc,char *argv[])
{
    int n;
    char ch[BUFSIZE];
    FILE *fp,*p;
    if((fp = fopen(argv[1],"a+")) == NULL)
    {
        printf("Cant't open %s ",argv[1]);
        exit(1);
    }
    p = fopen(argv[2],"w+");
    if(setvbuf(fp,NULL,_IOFBF,BUFSIZE) != 0)
    {
        fputs("Can't append file to itself\n",stderr);
        exit(1);
    }
    while(n = fread(ch,sizeof(char),1,fp) >0)
    {
          ch[BUFSIZE] = toupper(ch[BUFSIZE]);
          fwrite(ch,sizeof(char),n,p);
    }
    fclose(fp);
    fclose(p);
    return 0;
}
[em58]怎么复制出来的文件不是大写的呀?!

回复列表 (共3个回复)

沙发


[em21]怎么没人来的呀?!

板凳

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define BUFSIZE 1024

static void 
toupper_all (char *p, size_t n)
{
  char *end = p + n;
  for (;p < end; ++p)
    *p = (char) toupper (*p);
}

int main(int argc,char *argv[])
{
    int n;
    char ch[BUFSIZE];
    FILE *fp,*p;
    if (argc < 3)
      {
        printf ("missing argument");
        exit (1);
      }
    if((fp = fopen(argv[1],"a+")) == NULL)
    {
        printf("Cant't open %s ",argv[1]);
        exit(1);
    }
    p = fopen(argv[2],"w+");
    if(setvbuf(fp,NULL,_IOFBF,BUFSIZE) != 0)
    {
        fputs("Can't append file to itself\n",stderr);
        exit(1);
    }
    /* while((n = fread(ch,sizeof(char),1,fp)) >0)
     * 是不是掉了括号? 不然 n也只会是1或0. '=' 优先级小于 '>'  */
    while ((n = fread (ch, sizeof(char), 1, fp)) > 0)
    {
          /* ch[BUFSIZE] = toupper(ch[BUFSIZE]);
           * 上面溢出了,并且也只能把一个字符转换成大写  */
      toupper_all (ch, n);
          fwrite(ch,sizeof(char),n,p);
    }
    fclose(fp);
    fclose(p);
    return 0;
}
随手改的,没仔细看。主要问题就是那2个注释的地方。

3 楼


[em12]谢谢!原来toupper是一个个字符地转换的!我以为是整个字符串地转换的!

我来回复

您尚未登录,请登录后再回复。点此登录或注册