c strcat 操作中的分段错误

Segmentation fault in c strcat operation

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

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)
}

//sex 应该是这样的:gender_1, gender_2, gender_3 ... gender_9

您溢出了缓冲区。您忘记了字符串有一个空终止符。

与其编写这样极有可能被利用的脆弱代码,不如:

char sex[9];
snprintf(sex, sizeof sex, "%s%i", prefix, id);

使用snprintf,即使缓冲区大小错误,至少不会造成缓冲区溢出。当然它仍然可能是一个错误,所以你真的必须注意你的缓冲区大小。

一个选择是用你想要的尺寸来声明性别,而不是一个神奇的数字:

char sex[sizeof "gender_0"];

char sex[strlen(prefix) + 1 + 1];  // 1 for the digit, 1 for the terminator

sizeof 字符串文字包含空终止符。