-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 回答