在C中传递给函数的字符串中测试第n个字符==“x”的正确方法

时间:2017-01-18 14:36:04

标签: c strcmp

鉴于以下情况,我遇到了分段错误,我不确定是否因为我正在测试指针或其他问题。

测试第4个字符是逗号的正确方法是什么?

从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

我也试过直接使用传递的字符串,但也有段错误

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

2 个答案:

答案 0 :(得分:1)

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

doParseInput(in);

比较缓冲区的第4个字符(索引== 3):

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

(注意单引号,意思是Character-Value,而不是双引号,这意味着"String"

答案 1 :(得分:0)

首先,您将错误类型的参数传递给doParseInput。它需要char *,但您传递char (*)[]。你的编译器应该警告过你。

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

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