我一直遇到下面的代码问题,我想了解为什么它不起作用.当我直接在结构中使用一个从函数返回的字符串时,我得到了一个奇怪的行为.
第一个printf没有问题,与第二个和第三个相同,但由于某种原因,最后一个进入分段错误或只打印一个随机字符串.如果我尝试在结构中使用字符指针而不是数组,则问题不会出现.
#include <stdio.h>
typedef struct
{
int value;
char string[23];
} Test;
Test func()
{
Test nuovo = {5, "test"};
return nuovo;
}
int main()
{
Test test = func();
printf("\n1: %d", func().value);
printf("\n2: %s", test.string);
printf("\n3: %s", &(func().string[0]));
printf("\n0: %s", func().string);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
====================[ Build | test | Debug ]====================================
"C:\Program Files\JetBrains\CLion 2018.2.6\bin\cmake\win\bin\cmake.exe" --build C:\Users\rober\CLionProjects\test\cmake-build-debug --target test -- -j 4
"C:\Program Files\JetBrains\CLion 2018.2.6\bin\cmake\win\bin\cmake.exe" -SC:\Users\rober\CLionProjects\test -BC:\Users\rober\CLionProjects\test\cmake-build-debug --check-build-system CMakeFiles\Makefile.cmake 0
C:/MinGW/bin/mingw32-make.exe -f CMakeFiles\Makefile2 test
mingw32-make.exe[1]: Entering directory 'C:/Users/rober/CLionProjects/test/cmake-build-debug' …Run Code Online (Sandbox Code Playgroud)