【问题标题】:Replace a character with "argv[2]"用“argv[2]”替换一个字符
【发布时间】:2012-06-21 20:07:54
【问题描述】:

我这里有一些代码:

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

    int main (int argc, char *argv[])
    {
        char c;

        FILE *fp;

        fp = fopen(argv[1], "r");

        if (fp == NULL)
        {
            printf ("Errore nell'apertura del file %s\n\n", argv[1]);
            exit(EXIT_FAILURE);
        }

        while ( (c = getc(fp)) != EOF)
        {
            if (strcmp(c,argv[2]) == 0)
            {
                c = argv[3];
            }

            putchar(c);
        }

        return 0;
    }

第一个问题:我必须用 argv[3] 上的一些其他字符替换我的文件 (argv[1]) 上 argv[2] 中的一些字符...我知道 @987654322 @ 是一个大错特错的恐怖事情,但是......我怎样才能用我在 argv[3] 中写的字符替换我的“c”??

EX: out.exe file.txt a b
    ------  -------- - -
    program file     1 2
    name    name     letters

第二个问题:如果在 argv[2] 我有 2 个字符,第一个是要替换的字符,第二个是我必须替换的字符,我该怎么写? ?

EX: out.exe file.txt ab
    ------  -------- --
    program file     1/2
    name    name     letters (both on argv[2])

【问题讨论】:

  • 顺便说一句:对于while ( (c = getc(fp)) != EOF),您应该将c 设为int,而不是char。使用char,如果char 已签名,循环可能会提前停止,如果char 未签名,则根本不会停止。
  • 你应该检查argc == 4

标签: c file argv putchar getc


【解决方案1】:

argv 是指向char指针 数组。 argv[n] 返回一个指向char指针,而不是char。如果您想获得 pointer argv[n] 指向的第一个 char,然后取消引用它:

char c = *(argv[n]) // or argv[n][0]

我相信这也应该回答你的第二个问题。

【讨论】:

    猜你喜欢
    • 2015-11-26
    • 2012-10-12
    • 2020-02-08
    • 2021-12-23
    • 2016-12-30
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    相关资源
    最近更新 更多