segmentation fault while using format string to scan input

Posted by Aman Deep Gautam on Stack Overflow See other posts from Stack Overflow or by Aman Deep Gautam
Published on 2012-06-20T03:06:50Z Indexed on 2012/06/20 3:15 UTC
Read the original article Hit count: 188

Filed under:
|
|

consider the code and its result:

while ((row = mysql_fetch_row (table_info)) != NULL)
{
    answer='\0';
    printf ( "%s: ", row[0] );
    scanf ( "%c", &answer );
    getchar();
    if ( answer == 'y')
    {
        printf ( "*****\n" );
        table_name[index] = malloc ( strlen(row[0]) + 1 );
        printf ( "*****\n" );
        memcpy ( &table_name[index], &row[0], strlen(row[0]) + 1 );
    }
    printf ( "finally inserted: %s \n", table_name[index]);
}

The result on execution:

1_time_access: y
*****
*****
finally inserted: 1_time_access 
2_time_access: y
*****
*****
finally inserted: 2_time_access 
39_time_access: y
*****
*****
finally inserted: 39_time_access 

Explanation of result: row[0] has value 1_time_access, 2_time_access, 39_time_access. Now Consider a better way of doing it which is using a format string to escape the \n. I run the following code but it gives segentation fault, I cannot understand why. Code:

while ((row = mysql_fetch_row (table_info)) != NULL)
{
    answer='\0';
    printf ( "%s: ", row[0] );
    scanf ( "%[^\n]%*c", &answer );
    if ( answer == 'y')
    {
        printf ( "*****\n" );
        fflush(stdout);
        table_name[index] = malloc ( strlen(row[0]) + 1 );
        printf ( "*****\n" );
        fflush(stdout);
        memcpy ( &table_name[index], &row[0], strlen(row[0]) + 1 );
    }
    printf ( "finally inserted: %s \n", table_name[index]);
    fflush(stdout);
}

Result:

1_time_access: y
*****
./set-env.sh: line 17: 15263 Segmentation fault      (core dumped) ./exec dataset_one

(do not worry about set-env.sh, it is the script running th program.)

I canot understand why this is happening.

© Stack Overflow or respective owner

Related posts about c

    Related posts about segmentation-fault