コードとその結果を検討してください。
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]);
}
実行結果:
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
結果の説明:row[0]
値1_time_access
、2_time_access
、があり39_time_access
ます。ここで、フォーマット文字列を使用してエスケープするより良い方法を検討してください\n
。次のコードを実行すると、セグメンテーション違反が発生します。理由がわかりません。コード:
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);
}
結果:
1_time_access: y
*****
./set-env.sh: line 17: 15263 Segmentation fault (core dumped) ./exec dataset_one
(心配しないでくださいset-env.sh
。プログラムを実行するスクリプトです。)
なぜこれが起こっているのか理解できません。