-6

我有这个函数可以将字符串更改为所有小写。

我正在尝试为此函数创建一个单元测试,但我认为我传递了错误的参数,并且我收到了这个错误。

Segmentation Fault (core dumped)

这是我的代码。

void example (char const * str1, int length, char * str2) {
    int i;
    for(i = 0; i < length; i++) {
        *(str2 + i) = putchar(tolower( *(str1 + i) ));
    }
}

void testexample() {
    char * str1 = "TEST";
    char * str2 = "";
    example( str1, 4, str2);
    printf("%s\n", *str2);
}

int main() {
    testexample();
    return 0;
}

str1 是原始字符串,n 是字符串的长度,str2 是 str1 的全小写版本。

我一直试图解决这个问题有一段时间了。

我很感激任何帮助。谢谢你。

4

2 回答 2

0

在你的主要:

char * str2 = "";

然后str2作为参数传递,但它的存储空间太少,并且该存储空间是进一步的只读内存(指向文字)。结果是你的崩溃。利用:

char str2[32] = 0;

或您需要的任何长度,包括空终止字符。

于 2017-02-21T17:12:42.573 回答
0

你也写printf("%s", *str2)。如果 str2 是一个字符串,那么 *str2 是一个字符。

于 2017-02-21T21:42:01.653 回答