这是在c的采访中向我提出的问题:
#include<stdio.h>
void main(){
char *ch;
ch=fun1();
printf(ch);
}
fun1(){
char *arr[100];
strcpy(arr,"name");
return arr;
}
Run Code Online (Sandbox Code Playgroud)
我得到了上述程序,并被要求弄清楚上述代码中的问题.下面是我的答案
char **printf错了arr 范围仅限于该功能 fun1然后
采访者:你的解决方案是什么?
我:你需要将arr变量作为全局变量并修复上面提到的其余问题.
采访者:你不觉得全球变量是危险的吗?
我:是的,因为我们不知道在哪些函数中访问它的位置,有时几乎不可能找到哪个函数改变了值
Ineterviewer:给我一个没有全局变量的解决方案
我:????
你的解决方案是什么?任何人都可以指出我所犯的错误!
我曾经写过一次匆忙
#include <stdio.h>
static flag;
int main()
{
printf("flag is %d",flag);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它不会给出任何警告或错误,并且工作正常.我不明白为什么这会起作用?
我有一行代码如下:
int method(void) const;
Run Code Online (Sandbox Code Playgroud)
但是我不确定参数中的(void)是什么,或者const是什么.这也应该是一个公共'get',我不确定如何在类中接近(void)和const.
我正在尝试编译以下源代码,这些源代码可以在gccMicrosoft和Microsoft上成功编译cl.exe。
void SomethingBeforeExit();
void SomethingBeforeExit()
{
// some code
_exit(0);
}
int main(int argc, char *argv[])
{
// some code
atexit(SomethingBeforeExit);
}
Run Code Online (Sandbox Code Playgroud)
但是,我从以下消息中收到C4113警告cl.exe:
SomeCode.c(10): warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(void)'
Run Code Online (Sandbox Code Playgroud)
正如我所说,源代码仍然可以成功编译并且可以正常工作。我的目标是防止在中发生此警告cl,因为gcc在编译时不会生成任何警告。
我假设该函数的声明未被视为void SomethingBeforeExit(void),但是,我不知道如何将函数的参数列表明确声明为void。
我正在使用VS14and C/C++ 19.00.23918 for x86for cl.exe和gcc v5.4.0编译器来比较生成的警告。