将缓冲区与argv错误进行比较

时间:2012-04-19 13:20:02

标签: linux character buffer argv

我正在尝试编写一个命令来替换文件中的字符。例如, ./替换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])。

我收到此错误:赋值不使用强制转换

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

2 个答案:

答案 0 :(得分:0)

假设您正在使用C(似乎可能会出现错误消息):

你不能只用C语言来比较字符串。你现在只是在比较指针。 你想做到这一点:

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

您可能希望阅读C string handling

答案 1 :(得分:0)

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

如果要实现此功能,请使用Java,C ++或Python等语言进行尝试,其中字符串处理比C语言更容易。

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

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

你当前的程序还有一些问题:恕我直言,你忘了关闭第40行的评论,该评论会跳过关闭括号,这会对程序的其余部分造成混乱。

请:在打字之前考虑一下!首先进行设计并将其写下来。

另外请:阅读(并理解)原始答案(特别是带有字符串功能的部分);适应你的计划。