我是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,如果这可能会有所帮助。
答案 0 :(得分:0)
您正在返回在函数内声明的变量,该变量将不再存在于声明它的范围之外。使用动态分配的char数组,然后返回指向它的指针。
char* output = malloc(100 * sizeof(char));
...
return output ;
注意:您假设输入字符串少于100个字符。而不是那样,尝试将字符串的长度作为参数传递或使用strlen
。如果输入字符串超过99个字符,您的程序将崩溃。
同样如评论中所述,释放使用后分配的内存。