为什么加上static的变量在主函数中才能返回,不加static返回的就是空?
#include<string.h>
char* longestCommonPrefix(const char** strs, int strsSize) {
char string[200];//用来存放返回结果
int k = 0; //用来定义数组下标
for (int i = 0; i < strsSize; i++) //用来循环当前是第几个字符串
{
for (int j = 0; j <= strlen(strs[i]); j++) {//用来进行列的比较
if (i == 0) {
string[k] = strs[i][j];
k++;
continue;
}
else if (string[j] == strs[i][j]) {
continue;
}
else {
string[j] = '\0';
}
}
}
printf("%s\n", string);
return string;
}
int main() {
//定义一个字符串数组
const char* strs[] = { "flower", "flow", "flight" };
//计算数组长度
int size = sizeof(strs) / sizeof(strs[0]);
//调用函数并打印结果
char* string;
string = longestCommonPrefix(strs, size);
printf("The longest common prefix is: %s\n", string);
return 0;
}
#include<string.h>
char* longestCommonPrefix(const char** strs, int strsSize) {
static char string[200];//用来存放返回结果
int k = 0; //用来定义数组下标
for (int i = 0; i < strsSize; i++) //用来循环当前是第几个字符串
{
for (int j = 0; j <= strlen(strs[i]); j++) {//用来进行列的比较
if (i == 0) {
string[k] = strs[i][j];
k++;
continue;
}
else if (string[j] == strs[i][j]) {
continue;
}
else {
string[j] = '\0';
}
}
}
printf("%s\n", string);
return string;
}
int main() {
//定义一个字符串数组
const char* strs[] = { "flower", "flow", "flight" };
//计算数组长度
int size = sizeof(strs) / sizeof(strs[0]);
//调用函数并打印结果
char* string;
string = longestCommonPrefix(strs, size);
printf("The longest common prefix is: %s\n", string);
return 0;
}
char string[200];这么写的时候,string就是longestCommonPrefix函数中的一个临时变量,其作用域仅仅再longestCommonPrefix函数中,出了longestCommonPrefix函数就被编译器回收了。
而 static char string[200];则是静态变量,内存在静态数据区,跟全局变量一样,能够在程序的运行过程中一直存在,也就是出了longestCommonPrefix函数也能正常使用。
涉及到C语言变量的存储和作用域,是不是静态变量分配的存储区域也不一样,建议去学习一下相关知识。
栈上开辟的空间,函数结束会自动回收,你返回的是指针,仅仅是指针不变,指向的内容无法保证,如果想要内容不改变只能手动申请内存(malloc),或者使用全局变量或静态变量。
不加static返回的是局部变量的地址(在栈区),会报错,不知道你用的什么软件,返回局部变量的地址再使用该地址一般会报错,加上static后变量不再是局部变量(它的地址会发生变化,会在全局区),你可以输出两次string的地址看看