小编klu*_*utt的帖子

在结构定义中初始化结构成员时出错

我正在尝试创建一个结构,该结构具有struct nodo在代码上方定义的 2 个类型的指针。但它给了我错误:

在 '=' token lista dati_mappa=NULL; 之前应为 ':', ',', ';', '}' 或 'attribute'。

这是代码:

typedef int data;

struct nodo
{
    data elem;
    struct nodo *next;
};
typedef struct nodo *lista;

struct mappa {
    data R;
    data C;
    lista dati_mappa = NULL;
    lista pos_valida = NULL;
};
Run Code Online (Sandbox Code Playgroud)

c pointers list

0
推荐指数
1
解决办法
76
查看次数

如果取消引用空指针,在 CPU 级别会发生什么?

假设我有以下程序:

#include <signal.h>
#include <stddef.h>
#include <stdlib.h>

static void myHandler(int sig){
        abort();
}

int main(void){
        signal(SIGSEGV,myHandler);
        char* ptr=NULL;
        *ptr='a';
        return 0;
}

Run Code Online (Sandbox Code Playgroud)

如您所见,我注册了一个信号处理程序和一些行,我取消引用了一个空指针 ==> 触发了 SIGSEGV。但它是如何触发的?如果我使用strace(输出剥离)运行它:

//Set signal handler (In glibc signal simply wraps a call to sigaction)
rt_sigaction(SIGSEGV, {sa_handler=0x563b125e1060, sa_mask=[SEGV], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7ffbe4fe0d30}, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
//SIGSEGV is raised
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} ---
rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1], [SEGV], 8) = 0
Run Code Online (Sandbox Code Playgroud)

但是缺少一些东西,信号如何从 CPU 传递到程序?我的理解:

[Dereferences null pointer] -> …
Run Code Online (Sandbox Code Playgroud)

c linux cpu assembly signal-handling

0
推荐指数
1
解决办法
295
查看次数

c - 如何强制使一个线程在c中首先执行

我在 c 中创建了两个线程。我想由每个线程执行两个单独的函数。如何使一个特定的线程首先被执行。

#include <stdio.h>
#include <pthread.h>

void* function_1(void* p)
{
   // statements
}

void* function_2(void* p)
{
   // statements
}

int main(void)
{
   pthread_t id1;
   pthread_t id2;

   pthread_create(&id1, NULL, function_1, NULL);
   pthread_create(&id2, NULL, function_2, NULL);
   pthread_exit(NULL);
}
Run Code Online (Sandbox Code Playgroud)

程序启动时如何使function_1在function_2之前执行?

c linux multithreading pthreads

0
推荐指数
1
解决办法
53
查看次数

为什么不重新分配指向 const int 的指针会导致编译错误?

这是一个来自测试的问题。

int main() {
  const int i=1;
  const int *p=&i;
  int j=2;
  const int *q=&j;
  j=3;
  printf("%d", *p+*q);
  int k = 0;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

据我了解,双方pq都指向一个const int

我认为当我声明指向非常量值的指针时会出现编译错误,但它工作正常;这是为什么?

c pointers

0
推荐指数
1
解决办法
83
查看次数

多行值显示在 html 中的 div 标签内的单行中

我有我想在 div 标签中显示的多行文本内容。为此,我使用 javascript 将内容传递给 div 标签,如下所示

function MyFunction(){
    document.getElementById("get").innerHTML = document.getElementById("pass").value;
}
Run Code Online (Sandbox Code Playgroud)
#get{
    height : 50px;
    width : 200px;
    border:1px solid;
    overflow  : auto;
    border-color:rgb(204, 204, 204);
}
Run Code Online (Sandbox Code Playgroud)
<div id="get" style="border:1px solid" contenteditable="true">

</div>

<br>
<button onclick="MyFunction()">Fetch</button><br>
<br>
<textarea id="pass">
    Hello 
    How are You
</textarea>
Run Code Online (Sandbox Code Playgroud)

但是 textarea 中的内容是多行文本。但它在 html div 标签中显示为一行,如上面的代码片段所示,即你好在一行中,你好吗在另一行中,但在 div 标签中,它们都显示在同一行中。

html javascript css

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

我在C语言中有一些关于ASCII码的问题

在此代码中,我可以用诸如'a','z'等字符替换ASCII代码.

int main()
{
    int ch = 0;
    ch = getchar();

    if (ch >= 'a' && ch <= 'z')
        ch -= 32;
    else if (ch >= 'A' && ch <= 'Z')
        ch += 32;
    else
        ch = -1;

    if (ch == -1) {
        puts("nope");
        return 0;
    }

    putchar(ch);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c ascii

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

以下给出的代码是错误的吗?

#include <stdio.h>

int main()
{
    int a;
    printf(scanf("%d",&a));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我收到此消息"Segmentation fault(core dumped)"

c gcc

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

我可以强制gcc检测所有未定义的行为吗?

有没有一种方法可以强制gcc检测所有未定义的行为?我希望它检测在编译时和运行时都可以发现的东西。我知道UB不仅有助于简化编译器的创建,而且使编译器可以优化代码。后者在您进行调试时不相关,并且轻量级编译器的需求已不像1972年那样大。此外,gcc在这一点上是一个非常成熟的编译器,如果可能的话,它将进行大量调试工作更轻松。

我知道这-Wformat将对printf("%d", 42)未初始化的变量产生警告。当您尝试访问数组外部的内存时,该参数-Warray-bounds 可能会捕获,尽管我需要在构造实际上产生警告的代码中进行一些工作。我也知道可以使用检测到一些运行时错误-fstack-protector-all

所以我的问题就是这样。有没有办法保证所有UB都能被检测到,如果可能的话,在编译时,但是最迟在运行时才被检测到?

c gcc undefined-behavior

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

如何使用 goto 而不会出现此错误?

#include <stdio.h>

int main()
{
    repeat:
    printf("choose an option: \n1:Draw\n2:Even or Odd:\n3:Text type\n4:How to Dec\n5:Base to Dec:\n6:Count to Bits\n0:Exit\n"); 
    int x;
    scanf("%d", &x); 
    if (x > 6)
       printf("Wrong option!\n");
       goto repeat;
    if (x == 1) 
       printf("Drawing");
    if (x == 0)
       printf("we are out!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用在线编译器。

我想看到的最终结果是一个简单的菜单,它要求用户输入数字并根据数字执行代码,然后转到起点并再次打印菜单。(这就是我选择 goto 的原因。如果您有其他解决方案可以在执行后重新启动主程序,请告诉我。)

我遇到的问题是,无论我输入多少数字,它都会再次输出菜单而没有消息或不退出(当我输入0时)。

c label loops if-statement goto

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

为什么我在运行此功能时会出现分段故障?

当我发送标志-h或-H时,为什么会出现分段错误.

bool parse_command(int argc, char **argv, bool *header, char **fileName)
{

    if (!argv)
        return false;

    bool *flagh = false;
    bool *flagH = false;

    char *options = "Hh";
    int opt = 0;

    while ( (opt = getopt(argc, argv, options ) ) != -1)
    {
        printf("HELLO");
        switch (opt)
        {
            case 'h': 
                *flagh = true; 
                break;
            case 'H':
                *flagH = true; 
                break;
            default:
                usage_p1();  
                return false;
        }

    }
    printf("%d", opt);
    // Implement this function
    return true;
}
Run Code Online (Sandbox Code Playgroud)

c flags getopt segmentation-fault

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