Ну, мне не очень понятно, что вы там пытаетесь, но если это не то, что вам нужно, пожалуйста, дайте мне знать:
#include <string.h>
#include <stdio.h>
int findFOO( const char *const ptr, const char *const substr );
int search( const char *const src, const char *str );
size_t findOCC ( char *const src, const char *substr );
int main ( void )
{
char arr[] = "FOO,val1=0,val2=0" ;
printf("Before: %s\n", arr );
size_t len = findOCC( arr, "var1" );
arr[len] = '1';
printf("After: %s\n " , arr );
}
int findFOO( const char *const ptr, const char *const substr )
{
char *ret = strstr( ptr, substr );
if ( ret == NULL )
{
return 0;
}
return 1;
}
int search( const char *const src, const char *const str )
{
int i, j, firstOcc;
i = 0, j = 0;
while (src[i] != '\0')
{
while (src[i] != str[0] && src[i] != '\0')
i++;
if (src[i] == '\0')
return (-1);
firstOcc = i;
while (src[i] == str[j] && src[i] != '\0' && str[j] != '\0')
{
i++;
j++;
}
if (str[j] == '\0')
return ( firstOcc );
if (src[i] == '\0')
return (-1);
i = firstOcc + 1;
j = 0;
}
return 0;
}
size_t findOCC ( char *const src, const char *substr )
{
char buffer[strlen( src) + 1 ];
strcpy( buffer, src );
if ( findFOO ( src, "FOO" ) ) /// Search if there is a Line containing FOO
{
int ret = search( buffer, substr );
if ( ret ) /// found a Match
{
char *tmp = strtok( buffer, "=" );
return strlen( tmp ) + 1; /// return the index
}
}
return 0;
}
Вывод:
Before: FOO,val1=0,val2=0
After: FOO,val1=1,val2=0
Я не искал в файле, потому что вам нужен способ изменить ваш буфер, поэтому я позволю вам выполнить остальную часть работы здесь.
Конечно, требуется много проверки ошибокздесь, но я уверен, что вы можете понять, что вам нужно сделать.