此代码示例有什么问题?我得到了我的分段错误,或者程序继续无限运行。
const char* prefix = "gender_";
char sex[8];
int id;
for(id=0; id <= 9 id++)
{
sprintf(id_string, "%i", id); //converts int id to string id
strcpy(sex, prefix);
strcat(sex, id)
}
//性别应该是这样的:gender_1,gender_2,gender_3 ...... gender_9
答案 0 :(得分:2)
你的缓冲区溢出了。你忘记了字符串有一个空终止符。
不要编写像这样容易被利用的脆弱代码,而是:
char sex[9];
snprintf(sex, sizeof sex, "%s%i", prefix, id);
使用snprintf
,即使你的缓冲区大小错误,至少它不会导致缓冲区溢出。当然它可能仍然是一个bug,所以你真的必须要关心你的缓冲区大小。
一种选择是宣布你想要的性别,而不是一个神奇的数字:
char sex[sizeof "gender_0"];
或
char sex[strlen(prefix) + 1 + 1]; // 1 for the digit, 1 for the terminator
sizeof
字符串文字包括空终止符。