相关疑难解决方法(0)

为什么这些构造使用前后增量未定义的行为?

#include <stdio.h>

int main(void)
{
   int i = 0;
   i = i++ + ++i;
   printf("%d\n", i); // 3

   i = 1;
   i = (i++);
   printf("%d\n", i); // 2 Should be 1, no ?

   volatile int u = 0;
   u = u++ + ++u;
   printf("%d\n", u); // 1

   u = 1;
   u = (u++);
   printf("%d\n", u); // 2 Should also be one, no ?

   register int v = 0;
   v = v++ + ++v;
   printf("%d\n", v); // 3 (Should be the …
Run Code Online (Sandbox Code Playgroud)

c increment operator-precedence undefined-behavior sequence-points

793
推荐指数
13
解决办法
7万
查看次数

带有strcmp的Segfault

我在以下方面使用strcmp

  1. 传递char []数组名称
  2. 将指针传递给字符串文字,但第二个结果是seg错误.即使我已经确认指针指向正确的字符串文字,我很困惑为什么我得到seg错误..这是代码: -

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char const *args[])
    {
      char firstName[strlen(*++args)];
      strcpy(firstName, *args);
      char lastName[strlen(*++args)];
      strcpy(lastName, *args);
      printf("%s\t%s\n", firstName, lastName);
    
      printf("%d\n", strcmp(firstName, lastName));// this works
    
      printf("%d\n", strcmp(*(--args),*(++args)));//this gives me a seg fault
    
      return EXIT_SUCCESS;
    }
    
    Run Code Online (Sandbox Code Playgroud)

我将它保存为str.c,当我编译它时,首先我得到以下警告:

[Neutron@Discovery examples]$ gcc -Wall str.c -o str

str.c: In function ‘main’:
str.c:15: warning: operation on ‘args’ may be undefined
Run Code Online (Sandbox Code Playgroud)

最后运行它,给出一个seg错误,如下所示

[Neutron@Discovery examples]$ ./str Jimmy Neutron


Jimmy   Neutron

-4

Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)

c evaluation args strcmp sequence-points

10
推荐指数
2
解决办法
2033
查看次数

"错误:'=':左操作数必须是l值"?(在三元组中使用作业时?:)

我必须有语法问题,但我无法理解这意味着什么 - 我用Google搜索,但我不明白这个问题的原因.请告诉我函数语法有什么问题

这是错误的行:

else sequence= (Bnum < Anum) ? sequence=Bnum : sequence=Anum;
Run Code Online (Sandbox Code Playgroud)

这是功能

int reduction(int Knum)
{
    int sequence=8, Anum=0, Bnum=0;

    printf("enter a sequence,to stop print (-1)\n");
    while(sequence!=-1)
    {
        Anum = sequence;
        scanf("%d",&sequence);
        Bnum = sequence;
        if (Anum+Bnum<8)
            return 1;
        else
            sequence= (Bnum < Anum) ? sequence=Bnum : sequence=Anum;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++

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