gpt4 book ai didi

c - 在 C 中迭代字符串

转载 作者:行者123 更新时间:2023-12-04 21:44:02 24 4
gpt4 key购买 nike

在我的代码中,我正在从文件中读取逗号分隔的值。我使用删除函数来删除逗号。我遇到问题的地方是遍历字符串。我觉得我用来迭代字符串的 for 循环是正确的,但我可能做了一些非常愚蠢的事情,因为程序严重失败。那么,如何正确地迭代字符串呢?

文件中的每一行的格式类似于:

0000000000001110,1

这是我的代码:

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


void removeChar(char *str, char garbage);

int main(){
FILE *ifp;
char *mode = "r";
ifp = fopen("in.csv", mode);


char* string;

int i, len;
while(fscanf(ifp, "%s", string)!=EOF){
removeChar(string, ',');
printf("%s \n", string); //gives me correct output of string with no comma
len = strlen(string);
for(i=0; i<len; i++) //where the error occurs
printf("%c", string[i]);
}

return 0;
}

void removeChar(char *str, char garbage) {

char *src, *dst;
for (src = dst = str; *src != '\0'; src++) {
*dst = *src;
if (*dst != garbage) dst++;
}
*dst = '\0';
}

最佳答案

您已将字符串定义为:

char* string;

但在使用它从文件中读取数据之前,您还没有为其分配内存。这会导致未定义的行为。

建议:

  1. 使用数组。
  2. 使用fgets而不是fscanffgetsfscanf 更安全,因为您指定了要读取的最大字符数。

这是 main 的更新版本。

int main(){
FILE *ifp;
char *mode = "r";
ifp = fopen("in.csv", mode);

// Use an array of char.
char string[1024];

int i, len;
// Use fgets instead of fscanf.
while(fgets(string, 1024, ifp) != NULL) {
removeChar(string, ',');
printf("%s \n", string); //gives me correct output of string with no comma
len = strlen(string);
for(i=0; i<len; i++) //where the error occurs
printf("%c", string[i]);
}

return 0;
}

关于c - 在 C 中迭代字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26174604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com