在C语言中,测试第n个字符的正确方法==";x";在传递给函数的字符串中
鉴于以下情况,我得到了一个分段错误,我不确定这是否是因为我针对指针或其他问题进行测试 测试第四个字符是否为逗号的正确方法是什么 从fifo在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
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] == ',') {