在 C 语言中,如何在字符串中查找 '\' 字符?

4
假设我有一个由用户输入的字符串 asdfgh\hj,我想要找出字符串中 \ 字符的索引。在 C 语言中该如何实现呢?
我尝试使用 strchr() 函数,代码如下:strchr("asdfgh\hj",'\'),但编译器报错。
然后我使用了 == 运算符,但是仍然遇到同样的问题 —— 编译器再次报错。
4个回答

6
我尝试使用strchr()函数来查找字符串中的反斜杠,代码如下:strchr("asdfgh\hj",'\') 但编译器报错了。
这个函数是正确的!出现错误的原因是\是一个特殊的“转义”字符。它被用于定义“特殊”的不可打印字符,比如换行符\n。这就是为什么反斜杠本身\需要转义,像这样:\\
strchr("asdfgh\\hj",'\\')

1
如果用户输入了一个字符串,你不需要做任何改变。只有编译器需要转义斜杠。因此,如果你调用 strchr(userString, '\\'),你将得到指向正确位置的指针。 - Sergey Kalinichenko
1
@ranaarjun 你说编译器抛出了一个错误。如果字符串是由用户输入的,那么错误不可能与转义有关。因此,你不仅需要展示你实际得到的错误,而且你的原始帖子也是误导性的。 - user1508519
当用户输入的字符串包含反斜杠时,它会自动存储为 '\\' - rullof
1
@rullof 不是的,反斜杠并不会被存储成两个斜杠,它在字符串和字符文字中表示为两个斜杠。编译器将两个斜杠转换为一个斜杠,并保持在可执行二进制代码中的状态。 - Sergey Kalinichenko
@dasblinkenlight 这正是我的意思。换句话说,在 ASCII 表示中它将被存储为 092 - rullof
显示剩余6条评论

1

试试这个:

strchr("asdfgh\\hj",'\\')

1

C标准规定,C11 6.4.4.4:

双引号 " 和问号 ? 可以直接表示,也可以使用转义序列 \"\? 表示,但单引号 ' 和反斜杠 \ 必须使用转义序列 \'\\ 分别表示。

因此,请使用:

strchr("asdfgh\\hj",'\\')  

相反。


2
字符串中的反斜杠将被视为\h(我没有投反对票)。 - rullof
@rullof;糟糕!谢谢。+1 分 :) - haccks

1
在C语言中,反斜杠用于表示硬编码字符,例如 \n。因此,你需要写成 \\ 来表示反斜杠本身的意思:

char *backslash = strch("some text containing \\ ...", '\\');

请注意,在您提供的字符串中,\ 也需要写成 \\,否则它将被视为没有意义的 \h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接