Function to return a string in C. Why this return null?

时间:2018-12-03 13:22:09

标签: c string function

How can i return a string for work with? I dont know why this function arent working.

#include <stdio.h>

char* test(){
   char A[100];
   scanf("%s", A);
   printf("A = %s \n", A);
   return(A);
}

main(){
    char* B;
    B = test();
    printf("B = %s \n", B);  // why this return (null)?
}

1 个答案:

答案 0 :(得分:1)

这是未定义的行为。它可能会返回“正确”的值。它可能会做一些完全不同的事情,导致程序崩溃,甚至更糟。它是未定义行为的原因如下:

char* test(){
    char A[100];
    scanf("%s", A);
    printf("A = %s \n", A);
    return(A);
}

在这里,您在堆栈上声明了一个100 char的数组。稍后,您将地址返回到该内存。但是,它在堆栈上,因此该内存现在无效。然后,您将此无效的内存指针分配给B

char* B;
B = test();

所以在这一行:

printf("B = %s \n", B);  // why this return (null)?

您的行为不确定。

相反,请尝试以下操作:

char* test() {
    char* A = malloc(100);
    scanf("%s", A);
    printf("A = %s \n", A);
    return A;
}

在此函数中,内存分配在堆上。这样,您返回的指针是有效的(还请注意,A中的return A;周围不需要任何括号)。不过,不要忘记再次释放内存。您可以通过在程序结尾处调用此代码来完成此操作:

free(B);

请注意,对于您的代码,编译器可能会发出警告。它可能会说:

  

局部变量或临时变量的返回地址:A

这些警告可以帮助您发现潜在的问题并调试代码。当程序无法正常工作时,请尝试首先解决所有警告。