C从函数行为返回的意外字符串

时间:2015-09-11 06:18:22

标签: c string function

我是C的新手,我正在玩一些字符串操作。从函数返回一个字符串时,我遇到了一个非常奇怪的问题。我的简单程序如下:

int main(int argc, char* argv[])
{
    char text[] = "abAB";

    char* out = testString(text);

    printf("Result Text: %s", out);
    printf("\n");
}

char* testString(char* input) {
    char* text = copyString(input);

    return text;
}

copyString函数定义了将一个字符串复制到另一个字符串的简单操作。它如下:

char* copyString(char* input) {
    char output[100];

    int index = 0;
    while (input[index] != '\0') {
        output[index] = input[index];
        index++;
    }

    output[index] = '\0';

    return output;
}

问题在于,当我正在调试应用程序时,我从函数返回的字符串似乎没问题(Visual Studio可视化得很好),当printf行发生时,stdout上输出的字符串完全是奇怪而陌生 - 一张笑容满面的脸。可悲的是,我还无法发布图片,以便向我展示我在控制台中看到的输出结果。

我使用Visual C ++ Express 2010作为IDE,如果这可能会有所帮助。

1 个答案:

答案 0 :(得分:0)

您正在返回在函数内声明的变量,该变量将不再存在于声明它的范围之外。使用动态分配的char数组,然后返回指向它的指针。

char* output = malloc(100 * sizeof(char));
...
return output ;

注意:您假设输入字符串少于100个字符。而不是那样,尝试将字符串的长度作为参数传递或使用strlen。如果输入字符串超过99个字符,您的程序将崩溃。

同样如评论中所述,释放使用后分配的内存。