如何在C中包含"%"的字符串上执行strcmp?

m.d*_*han 2 c unix linux

我有一个解析配置文件的C程序.配置文件允许格式化一些wildchars option=%any.

问题是,当我使用strcmp比较值时,我得到一个非法的指令错误.

示例程序来说明这一点:

char str1[10];
sprintf(str1,"%any");

if(strcmp(str1,"%any") == 0) 
        printf("match\n");

return 0;
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./a.out
Illegal instruction
Run Code Online (Sandbox Code Playgroud)

printf也会抛出此错误.

使用printf("%s \n",str1);

输出是:

$ ./a.out
0x0.07fff00000001p-1022ny
Illegal instruction
Run Code Online (Sandbox Code Playgroud)

我尝试转义,即在sprintf中使用"\%any"而不是"%any"; 但这没有用.

在C++中,使用std :: string ==比较,使用cout打印似乎工作正常.

有人可以帮助我找出如何用C做到这一点.

md5*_*md5 6

它来自sprintf.

#include <stdio.h>

sprintf(str1, "%%any");
Run Code Online (Sandbox Code Playgroud)

正如Paul R.所说,你可以使用而strcpy不用担心这些格式.

  • @ H2CO3:我同意`snprintf`,但不同意'strncpy`.此函数不适用于以null结尾的字符串. (3认同)
  • 更好的是,使用strcpy而不是sprintf. (2认同)
  • @ H2CO3 strncpy不是strcpy的安全版本.[阅读本文](http://stackoverflow.com/questions/2114896/why-is-strlcpy-and-strlcat-considered-to-be-insecure). (2认同)