获取C中char数组中char的索引

时间:2011-12-06 22:00:42

标签: c

我收到了一个错误。 “传递参数1'strchr'使得整数指针没有强制转换”

我该如何解决?

这发生在const char *ptr = strchr(c, ';');中,而我正在尝试做的只是获取char数组中特定char的索引。

在我的文件中,我有例如100行,并且在每行中,我有类似 12345; Lucas 的东西,所以我需要拆分它,数字和字母,我正在尝试搜索“;”并分开。

按照我的代码

FILE *fp;
char c;
char c2[100];
int i = 0;

fp = fopen("MyFile.csv", "r");

if (!fp) {
    printf("Error!\n");
    exit(0);
}

while((c = getc(fp)) != EOF){
    for (i = 0; i < 1; i++)
{

        const char *ptr = strchr(c, ';');
        if(ptr) {
           int index = ptr - c;
           printf("%d", index);
        }

    }
    printf("%c", c);
}

5 个答案:

答案 0 :(得分:3)

您的变量c单个字符,而不是字符数组。

答案 1 :(得分:1)

无需在getcstrchr的基础上实现此目的。

如果您的数据按行排列,则应使用fgets按行读取文件。 如果您的数据以';'分隔,那么您应该使用sscanf将行缓冲区拆分为子字符串。

请参阅this post以获取解决类似问题的示例程序。

答案 2 :(得分:0)

strchr用于搜索以NULL结尾的字符串中的特定字符。要比较两个字符,只需使用==

if( c == ';' ) {
  // do something
}

答案 3 :(得分:0)

这是疯狂的代码!不知道for循环是什么......也许你想要类似......

while(fgets(c2, 100, fp) != NULL)
{
    char* first = c2;
    char *second = c2;
            // look for a ;  or the end of the string...
    while(*second != ';' && *second != 0) second++;
    if(*second == 0) continue;  // if there was no ; just carry on to the next line
    *second = 0; second++; // put a terminator where the ; was

            // first will now point to the first string :- 123456
            // second will now point to the second part :-  Lucas
    printf("%s  %s\r\n", first, second);        
            // you may want to trim the second part of \r\n chars.
}

答案 4 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    FILE *fp;
    char c;
    char c2[100];
    int i = 0;

    fp = fopen("MyFile.csv", "r");

    if (!fp) {
        printf("Error!\n");
        exit(-1);
    }

    while(NULL!=fgets(c2,100,fp)){//fgets read one line or 100 - 1 char 
        char *ptr = strchr(c2, ';');
        if(ptr) {
            int index = ptr - c2;
            printf("index of %c is %d\n", *ptr, index);
            *ptr = '\0';
            //12345;Lucas -> first is "12345", second is "Lucas"
            printf("split string first is \"%s\", second is \"%s\"\n", c2, ptr + 1);
        }
    }
    fclose(fp);

    return 0;
}