我收到了一个错误。 “传递参数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);
}
答案 0 :(得分:3)
您的变量c
是单个字符,而不是字符数组。
答案 1 :(得分:1)
无需在getc
和strchr
的基础上实现此目的。
如果您的数据按行排列,则应使用fgets
按行读取文件。
如果您的数据以';'
分隔,那么您应该使用sscanf
将行缓冲区拆分为子字符串。
请参阅this post以获取解决类似问题的示例程序。
答案 2 :(得分:0)
strchr
用于搜索以NULL结尾的字符串中的特定字符。要比较两个字符,只需使用==
if( c == ';' ) {
// do something
}
答案 3 :(得分:0)
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;
}