学习高阶C++

1、指向结构体的指针必须初始化

#include<stdio.h>
void main()
{
    struct abc{
    int a;};
    struct abc *p;
    p->a=1;
    printf("%d",p->a);
}

这个编译没有问题,但是运行是段错误,请问为什么呢 因为你定义了一个结构体指针p,用来指向此类结构体,但是你却没有给他赋值,此时p的值为NULL,你并没有在内存中为p分配任何空间,所以p->a=1这句就会出段错误。

修改方法1:可以给p分配一段内存空间,并使其指向此空间: p=(struct abc *)malloc(sizeof(struct abc)); p->a = 1; 方法2:可以让p指向一个已存在的内存空间: struct abc temp; p=&temp; p->a = 1;

2、

//此宏展开后,类似于printf("%d""%d", 1, 2);  
#define TRACE_CMH_2(fmt,...) \  
    printf("%s(%d)-<%s>: "##fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__)

3、warning: function declaration isn’t a prototype(函数声明不是原型)的解决办法

原因是无参函数报的警告,只需要添加void即可。

static int hello_init(void)
{
    printk(KERN_EMERG   "hello world!\n");
    return 0;
}

4、system与exec的区别

1、system()和exec()都可以执行进程外的命令,system是在原进程上开辟了一个新的进程,但是exec是用新进程(命令)覆盖了原有的进程 2、system()和exec()都有能产生返回值,system的返回值并不影响原有进程,但是exec的返回值影响了原进程

char cmd[MAX_BUF_LEN]; memset(cmd, 0, MAX_BUF_LEN); snprintf(cmd, MAX_BUF_LEN, "mkdir -p %s", today_dir_path); pid_t status = system(cmd);

if (!(status != -1 && WIFEXITED(status) && WEXITSTATUS(status) == 0)) { printf("system error, exit status value"); }

#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>

int main()
{
    pid_t status;


    status = system("./test.sh");

    if (-1 == status)
    {
        printf("system error!");
    }
    else
    {
        printf("exit status value = [0x%x]\n", status);

        if (WIFEXITED(status))
        {
            if (0 == WEXITSTATUS(status))
            {
                printf("run shell script successfully.\n");
            }
            else
            {
                printf("run shell script fail, script exit code: %d\n", WEXITSTATUS(status));
            }
        }
        else
        {
            printf("exit status = [%d]\n", WEXITSTATUS(status));
        }
    }

    return 0;
}

5、细节决定成败

我的小伙伴还以为是编译器长时间不用凉了么

int j = 0;
for (j = 0; j < 10; j++);
{
    printf("j = %d\n", j);
}

输入结果是j = 10只有一行
如果是1的,肯定就是一行,这就会很迷惑。因此要养成良好的代码习惯。
我见过for循环末尾,函数末尾添加分号的,这种情况虽然没有影响,但是个人觉得还是不要有才好。

results matching ""

    No results matching ""