指向 C 中的字符串管理的指针:替换字符串中的特定字符

Pointer to string management in C: Replacing specific characters in a string

我想用“,-1,”替换 .csv 文件中一行中所有“,”的大小写。在这个id之前还喜欢在行尾加一个逗号。

我试图通过将行分成两个子字符串来获得它,一个是 , 之前的内容,一个是之后的内容,然后将它们连接起来,但我可能搞砸了每件事的内容指点也。

此外,在此操作之前,我想在文件末尾添加一个额外的逗号,这样如果末尾也有缺失值,就会被处理掉。

//Get line from file
char line[70];
fgets(line, 70, infile);

//Add "," to the end of the line
char * temp;
temp = strstr(line, "/n");
strncpy(temp, ",/n", 2);
puts(line);

//Process Line
while (strstr(line, ",,") != NULL) {
    char * temp; 
    char endTemp[50];
    temp = strstr(line, ",,");
    strcpy(endTemp, temp + 2);
    strncpy(temp, ",-1,", 4);
    strcat(temp, endTemp);
    puts(line);
}

我想我搞砸了我拉出的两个子字符串,因为如果起始字符串是这样的:

ajd43,232,0,0,0,3

它打印

ajd43,232,-1,0,0,0,3 ,(/n)0,0,0,3

我认为错误在最后的 strcat 中,但如果他们是执行此操作的更简单方法,我想使用它。

(1) 你的 "/n"s should be "\n"s.

(2) 使用 strncpy(temp, ",\n", 3);或者在 temp[2] 之后手动添加一个空字符。

(3) 使用 strncpy(temp, ",-1,", 5);或者在 temp[4] 之后手动添加一个空字符。

(4) 考虑截断并使用 strcat 而不是 strncpy。

(5) 如果要在生产中使用,请检查是否超限。

(6) 用逗号替换换行符即可。 puts() 会将其添加回来。 (因此改变#2)

像这样:

// Get line from file
char line[70];
fgets(line, 70, infile);

//Add "," to the end of the line
char * temp;
temp = strstr(line, "\n");
strcpy(temp, ",");

//Process Line
while (strstr(line, ",,") != NULL) {
    char * temp; 
    char endTemp[70];
    temp = strstr(line, ",,");
    strcpy(endTemp, temp + 2);
    temp[0] = '[=10=]';
    strncat(line, ",-1,", 70);
    strncat(line, endTemp, 70);
}
puts(line);