在C语言中,测试第n个字符的正确方法==";x";在传递给函数的字符串中

在C语言中,测试第n个字符的正确方法==";x";在传递给函数的字符串中,c,strcmp,C,Strcmp,鉴于以下情况,我得到了一个分段错误,我不确定这是否是因为我针对指针或其他问题进行测试 测试第四个字符是否为逗号的正确方法是什么 从fifoabc、def、xyz读取字符串 char in[BUFFER] = {'\0'}; if ((in_fl = open(*fifofile, O_RDONLY)) == -1) { while (read(in_fl, in, BUFFER)>0) { doParseInput(&in); } void

鉴于以下情况,我得到了一个分段错误,我不确定这是否是因为我针对指针或其他问题进行测试

测试第四个字符是否为逗号的正确方法是什么

从fifo
abc、def、xyz读取字符串

char in[BUFFER] = {'\0'};
if ((in_fl = open(*fifofile, O_RDONLY)) == -1)
    {
     while (read(in_fl, in, BUFFER)>0) {
      doParseInput(&in);
    }


void *doParseInput(char *inputread){
//copy string to use later....
 char* theParsedString = calloc(strlen(inputread)+1, sizeof(char));
 strcpy(theParsedString , inputread);
 if (strcmp(theParsedString[3], ",") == 0){ //causes seg fault
我也尝试过直接使用传递的字符串,但也使用seg fault

if (strcmp(inputread[3], ",") == 0){ //causes seg fault

要将缓冲区传递给函数,请不要使用
&

相反:

要比较缓冲区的第四个字符(索引==3),请执行以下操作:


(注意单引号,意思是
字符值
,而不是双引号,意思是
“String”

首先,您将错误类型的参数传递给了
doParseInput
。它需要一个
char*
,但您正在向它传递一个
char(*)[]
。您的编译器应该警告您这一点

另一个问题是使用字符串比较来检查单个字符。您需要使用字符常量(即使用单引号而不是双引号),并直接将其与数组成员进行比较

if (theParsedString[3] == ',') {

if(inputread[3]=','){
是比较字符的方式。
strcmp()
用于比较字符串(字符序列以空字节结尾)。请参阅此相关内容。由于您要求的是C解决方案,所以实际上不是重复的,但接受的答案也有C。请确保在
(你的缓冲区):如果你只读取3个字符,你就不能测试第4个。然后,使用
doParseInput(in)
而不使用符号。然后,比较像
inputread[3]==','
。什么样的蹩脚编译器让这段代码编译?你能展开或指向一些关于“为什么”的文档吗不使用&传递缓冲区。使用
&
和不使用works,我有兴趣了解不使用它背后的良好实践,thx Art
if (theParsedString[3] == ','){ 
if (theParsedString[3] == ',') {