c strcat操作中的分段错误

时间:2015-03-22 23:54:52

标签: c segmentation-fault strcpy strcat

此代码示例有什么问题?我得到了我的分段错误,或者程序继续无限运行。

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

1 个答案:

答案 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字符串文字包括空终止符。