-5

最後の行で例外が発生します。

理由はわかりませんが、res_name="engine_wooo_idle"

十分に長いことを意味します。

static void searchEnginesIcons_download_callback(const char* res_name,
        int success, void *context, char *last_modified) {
    if (success) {

        int i = 0;
        for (i; i < 6; i++) {
            char substringFiveChars[6];

            strncpy(substringFiveChars, res_name+7, 5);

私が試してみました:

    int i = 0;
    for (i; i < 6; i++) {
        char substringFiveChars[6];

        substringFiveChars[5] = '0';

        strncpy(substringFiveChars, res_name+7, 5);

しかし、例外もスローします

これはどれもうまくいきませんでした:

substringFiveChars[5] = 0;

substringFiveChars[5] = '\0';
4

2 に答える 2

2

instrncpy()の前に 5 文字以上あるため、 はこの「部分文字列」を終了しないことに注意してください。'\0'res_name + 7

これは、後でどのように使用するかによって、あらゆる種類の問題につながる可能性がありますsubstringFiveChars。コードが完全ではないため、確実に判断するのは困難です。

これは、変数が呼び出されても、実際には有効な部分文字列が含まれsubstringFiveCharsていないことを意味することに注意してください。たとえば、 の後にそれを呼び出すと、未定義の動作が呼び出されます。strlen()strncpy()

表示されている「例外」が実際に何であるかをより明確にし、さらに多くのコードを表示する必要があります。

于 2013-07-08T10:38:26.510 に答える
1

文字列がコピーされた後、'\0'文字を明示的に含める必要があります。

「\0」文字がないと、多くの文字列 API で誤った動作が発生します。

于 2013-07-08T10:50:05.557 に答える