This question already has answers here: Closed 4 years ago. Returning an array using C(8个答案)我写了一个算法从字符串中提取单词并将它们存储在数组中,但是我得到了一个不想要的结果,我不知道为什么,输出的是一个非常奇怪的字符。#include <stdio.h>#include <windows.h>char *extract(char *String){char str[10][20];int x = -1,y = 0,z = 0;for( size_t n = 0 ; n < strlen(String) ; n++ ){ y++; if( String[n] == ' ' ) y = 0, z = 0; if( y == 1 ) x++; if( y > 0 ) { str[x][z] = String[n]; z++; str[x][z] = '\0'; //Comment this********* }}/*for( int n = 0; n < 10; n++ ) Uncomment this*****{ str[n][3] = '\0';}*/ return str[7];}int main(){ printf( "WORD : %s\n",extract("POL POL POL POL POL POL POL POL POL POL") ); system("PAUSE"); return 0;}代码中的错误在哪里?注意:当我在其他地方使用printf和strlen时,也会得到奇怪的字符。 最佳答案 我在这里看到的问题是,str是函数extract()的一个局部变量,您试图返回它的地址,并将返回的值用作printf()的参数。它调用UB。要澄清, >将一直存在,直到完成执行为止。一旦它完成执行并返回给呼叫者,就不会有“ccc>”的存在。因此,返回的指针将指向无效的内存位置。进一步使用该重新运行值将导致undefined behaviour。
10-04 13:17