【问题标题】:Comparing buffer with argv error将缓冲区与 argv 错误进行比较
【发布时间】:2014-08-13 02:16:05
【问题描述】:

我正在尝试编写一个命令来替换文件中的字符。例如, ./replace E XY hello.txt [b]hello.txt [/b] 包含单词 [b]HELLO WORLD[/b]。字母 E 将替换为 XY。 因此,HELLO WORLD 将变为 HXYLLO WORLD。 我已将文件读入 char buf[100]

 0   1   2   3   4  5   6   7   8   9   10
[H]-[E]-[L]-[L]-[O]-[]-[W]-[O]-[R]-[L]-[D]

我想说:

If buf[x] == argv[1],
then buf[x] = argv[2]

其中 x 是特定的缓冲区元素(在本例中为 buf[1] == argv[1])。

我收到此错误:assignment make integer without cast

如何将缓冲区中的元素与参数向量进行比较??

【问题讨论】:

  • 您的语法可以修复以解决类型问题,但您的算法非常不完整。例如,您需要遍历参数并向 argv 添加另一个下标: (buf[x] == argv[1][n])。

标签: linux character buffer argv


【解决方案1】:

假设您使用的是 C(这似乎很可能给出错误消息):

您不能在 C 中以这种方式比较字符串。您现在只是在比较指针。 你想这样做:

if (! strcmp(buf, argv)) {
  // strings are equal
}

您可能想阅读C string handling

【讨论】:

  • 好的。但问题是我试图用 XY 替换“我”。但“我”只占一个元素。
  • 是的。除了就地替换之外,您还需要做更多的工作。尝试将字符串复制到新缓冲区并在复制时扫描要替换的模式。
【解决方案2】:

如果您需要一个程序来替换所描述的字符串(以及更多),请尝试streplace

如果您想实现这一点,请尝试使用 Java、C++ 或 Python 等语言,其中字符串处理比 C 容易得多。

如果你必须使用C,你必须使用'strcmp()'、'strcpy()'、'memcpy()'或'memmove()'之类的函数。提示:char buf[100] 可能也不是读取整个文件的好选择。

评论后编辑: 请考虑一下您的概念和设计——这是不行的。示例:在当前解决方案中,您错过了在一个“读取”块中开始并在下一个块中结束的匹配项。

您当前的程序也存在一些问题:恕我直言,您“忘记”关闭第 40 行中的注释,该注释跳过了与程序的其余部分混淆的右括号。

请:在输入之前三思!先做一个设计,然后写下来。

另外请:阅读(并理解)原始答案(尤其是带有字符串函数的部分);调整你的程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-14
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多