#include <stdio h>
#include <stdlib.h>
int main(int argc, char *argv[], char *envp[])
{
int i = 0;
while (envp[i] != NULL)
{
if (strstr(envp[i], "SHLVL") != NULL)
printf("%s\n", envp[i]);
i++;
}
setenv("SHLVL", "stackoverflow", 2);
i = 0;
while (envp[i] != NULL)
{
if (strstr(envp[i], "SHLVL") != NULL)
printf("%s\n", envp[i]);
i++;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这段代码中SHLVL是一个现有的环境变量。当我尝试使用它更改该变量的值时,setenv它会给出预期的输出。
SHLVL=1
SHLVL=stackoverflow
Run Code Online (Sandbox Code Playgroud)
在另一种情况下:具有不存在的环境变量的相同代码
int main(int argc, char *argv[], char *envp[])
{
int i = 0;
while (envp[i] != NULL)
{
if …Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
int main()
{
int (*ptr) [5];
printf ("%lu\n" , sizeof (ptr));
printf ("%lu\n" , sizeof (*ptr));
}
Run Code Online (Sandbox Code Playgroud)
我使用的是64位系统。当我在 gcc 编译器中运行此代码时,它会生成输出8 and 20。我的问题是为此分配多少字节pointer to an array?是 8 或 20,为什么?
#include<stdio.h>
int main()
{
printf ("Hello\r");
}
Run Code Online (Sandbox Code Playgroud)
在 gcc 编译器中,执行此代码时不会打印任何内容。如果我添加\n到 printf 语句中,例如
printf ("Hello\r\n");
Run Code Online (Sandbox Code Playgroud)
它打印Hello。为什么它会这样?输出缓冲区发生了什么?
#include <stdio.h>
int main() {
// case 1
const int a = 10;
int * ptr1 = &a;
*ptr1 = 11;
printf("%d\n",*ptr1);
// case 2
const static int b = 10;
static int * ptr2 = &b;
*ptr2 = 11;
printf("%d\n",*ptr2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这个程序中我可以理解情况1(通过将const变量的地址分配给非常量指针,我们可以改变变量值)。如果我将相同的概念应用于案例 2,我将无法工作。它给出了分段错误。是什么原因 ?case2 还有其他概念吗?这里我使用gcc编译器。