这是在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:给我一个没有全局变量的解决方案
我:????
你的解决方案是什么?任何人都可以指出我所犯的错误!
我们在代码中声明了如下所示的数组.数组将在堆栈本身上处理.我们没有用malloc或分配堆上的任何内存new
char a[20000];
Run Code Online (Sandbox Code Playgroud)
现在我们需要将它改为1800000(180kb)而不是20kb.如下:
char a[1800000];
Run Code Online (Sandbox Code Playgroud)
我们只是用一些数据填充数组.这是一件有效的事吗?
我们可能遇到的问题是什么?我只担心价值似乎太大了.有没有更好的方法来绕过这种需求?
我正在开发solaris unix平台.
anybvody可以告诉我为什么unix不存储文件创建时间?这是一个很大的负担,因为它存储修改时间,更改时间和访问时间而不是创建时间?它有什么具体原因吗?
或者是通过使用某种语言(任何编程语言)和一些系统调用,我们可以获得文件创建时间如何?
基本上我需要的是如果我有两个如下所示的数组:
my @a=("a","b","c");
my @z=("x","y","z");
Run Code Online (Sandbox Code Playgroud)
我想结果数组是:
("a x","b y","c z")
Run Code Online (Sandbox Code Playgroud)
pre条件是数字是两个数组中的元素总是相同的.post condtion命令应该与原始数组顺序相同.我写了一个简单的循环
my $i;
for($i=0;$i<scalar(@a);$i++)
{
push(@result,$a[$i]." ".$z[$i]);
}
Run Code Online (Sandbox Code Playgroud)
以上的作品.但有没有更好的方法呢?
我在一行上有一些数据,如下所示
abc edf xyz rfg yeg udh
Run Code Online (Sandbox Code Playgroud)
我想提供如下数据
abc
xyz
yeg
edf
rfg
udh
Run Code Online (Sandbox Code Playgroud)
以便用换行符分隔打印备用字段.这有什么衬里吗?
这可能是一个基本问题,但我想问,因为我不知道它.
如果我有一个二进制文件,它是在HP-UX上创建的,我突然在Linux上使用这个二进制文件,或者让我们说在AIX或sun solaris这样的任何其他平台上,如果我想查看二进制文件的详细信息,请参阅它是在哪个平台上开发的,我怎么能在任何平台上做到这一点?还是有一种通用的方式在unix的所有风格上做它?
我正在运行一个小型的c程序:
#include<stdio.h>
int main()
{
char *p;
p = (char *)malloc(10);
free(p);
free(p);
free(p);
printf("\npointer is freed!!\n");
}
Run Code Online (Sandbox Code Playgroud)
基本上我释放已经被释放的记忆.我认为应该导致核心转储!!是不是这样?
但它正在印刷
pointer is freed!!
Run Code Online (Sandbox Code Playgroud)
我错了一些在哪里?
当我在服务器上启动putty时,我得到如下提示:
hpbl802!benjaminb:~ [22]>
Run Code Online (Sandbox Code Playgroud)
如何将此提示更改为
benjamin:~ [22]>
Run Code Online (Sandbox Code Playgroud) int main()
{
int *d=0;
printf("%d\n",*d);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这很好用.
>cc legal.c
> ./a.out
0
Run Code Online (Sandbox Code Playgroud)
如果我更改语句int *d=0;,int *d=1;
我会看到错误.
cc: "legal.c", line 6: error 1522: Cannot initialize a pointer with an integer constant other than zero.
Run Code Online (Sandbox Code Playgroud)
很明显,它只允许零.我想知道当我们这样做时,内存中发生了什么,这int *d=0使得它成为有效的语法.
我只是出于好奇而问这个!
c ×4
unix ×4
c++ ×2
perl ×2
shell ×2
arrays ×1
awk ×1
binaryfiles ×1
coredump ×1
executable ×1
memory-leaks ×1
prompt ×1
regex ×1
sed ×1