小编suk*_*996的帖子

string.h的strcmp与我自己的strcmp实现之间的区别

第一个printf输出为-1,而第二个printf输出为-115。

#include<stdio.h>
#include<string.h>
int mystrcmp(char*s, char*t){
    for(;*s==*t;s++,t++){
        if(*s=='\0'){
            return 0;
        }
    }
    return (*s-*t);
}
int main()
{
    char *y,*x="this";
    y="thiss";
    printf("%d\n\n",strcmp(x,y));
    printf("%d",mystrcmp(x,y));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我了解,在我的实现中,代码正在计算0(ASCII为Null)-'s'(ASCII值115)。任何人都可以帮助我如何精确复制string.h中的strcmp函数的工作吗

c string pointers

5
推荐指数
2
解决办法
96
查看次数

C语言中如何访问同名的局部变量和全局变量

我在学校有一项作业,其中我必须找到以下 C 代码的输出,并解释输出。

#include<stdio.h>
int i;
void fun1(void);
void fun2(void);
int main()
{
    fun1();
    fun2();
    return 0;
}

void fun1(){
    i=20;
    printf("%d\t",i);
}

void fun2(){
    int i=50;
    printf("%d",i);
}
Run Code Online (Sandbox Code Playgroud)

输出是 20 50 因为在 fun1() 中全局变量“i”被分配给 20 并打印。在 fun2() 中,变量“i”是一个局部变量,它被声明并初始化为 50,然后被打印。

出于好奇,我有以下问题,如何在 fun2() 中使用全局变量“i”?一个简单的解决方案就是简单地更改名称并避免整个事情。但我的好奇心是由于Java,其中有一个关键字“this”来访问类变量而不是局部变量。

那么在C中有什么办法可以做到这一点吗?

c scope declaration linkage

2
推荐指数
1
解决办法
1376
查看次数

返回局部变量和动态创建的变量的地址

代码 1:

int *g(){
    int *p;
    p=(int *)malloc(sizeof(int));
    *p=10;
    return p;
}
Run Code Online (Sandbox Code Playgroud)

代码 2:

int *g(){
    int p=10;
    return &p;
}
Run Code Online (Sandbox Code Playgroud)

输出:

代码 2 ----> [警告] 函数返回局部变量的地址 [-Wreturn-local-addr] 仍然给出正确的输出(10)

代码 1 ----> 工作正常。没有警告,没有错误。

我有很多问题。

  1. 代码 1 也返回了一个局部变量的地址,那么为什么没有警告呢?

  2. 代码 2 给出了警告,我明白,我正在返回一个局部变量的地址。当函数 g 执行完成时,栈记录被弹出,因此存在悬空指针的情况。尽管如此,当我运行它时,为什么它会给出正确的输出(10)?

  3. 代码 1 没有警告,没有错误。但这是一个好习惯吗?

PS 两种场景的主要功能相同。

int main()
{
    int *v=g();
    printf("%d",*v);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

c pointers dynamic-memory-allocation dangling-pointer

-1
推荐指数
1
解决办法
34
查看次数