小编Nat*_*thu的帖子

为什么第二个scanf()不会执行

我正在尝试执行这段代码.

#include <stdio.h> 
int main(void)
{       

     printf("Start from here\n");
     int e, f, g, h;

     scanf("%d,%d", &e, &f);
     scanf("%d, %d", &g, &h);

     printf("%d %d %d %d", e, f, g, h);
}
Run Code Online (Sandbox Code Playgroud)

当我输入2,0或匹配第一个格式字符串的东西时,scanf()第二个scanf()也执行.

但是,如果我输入类似于2-0第一个的东西scanf(),程序会跳过第二个scanf()并直接进入printf()

例如,这是程序样本运行的输入和输出.第二行是输入.

Start from here
1-2  
1 0 -2 -856016624u
Run Code Online (Sandbox Code Playgroud)

注意程序如何完全跳过第二个scanf(),并直接进入printf().为什么第二个scanf()被跳过这里?

c scanf

14
推荐指数
2
解决办法
1560
查看次数

分配给指针时从不兼容的指针类型警告初始化

当我使用这段代码时,GCC给我一个'来自不兼容指针类型的初始化'警告(虽然代码工作正常并且做了它应该做的事情,它打印了数组的所有元素).

#include <stdio.h>

int main(void)
{
    int arr[5] = {3, 0, 3, 4, 1};
    int *p = &arr;

    printf("%p\n%p\n\n", p);

    for (int a = 0; a < 5; a++)
        printf("%d ", *(p++));
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

但是当我使用这段代码时没有给出警告

int main(void)
{
    int arr[5] = {3, 0, 3, 4, 1};
    int *q = arr;

    printf("%p\n%p\n\n", q);

    for (int a = 0; a < 5; a++)
        printf("%d ", *(q++));
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

这两个片段之间的唯一区别是我指定*p =&arr和*q = arr.

  • 究竟有什么不同和制作?
  • 为什么代码在两种情况下都会执行并提供完全相同的输出?

c arrays pointers

9
推荐指数
2
解决办法
2万
查看次数

为什么我不能在此指针处打印值?

昨天的问题之后,我用指针进行了一些实验.特别是int(*)[n]类型的指针

这是我写的一些代码:

#include <stdio.h>

int main(void)
{
    int a[5] = {1, 2, 3, 4, 5};

    int (*p) [5] = &a;
    int *q = a;

    printf("\t\t\t\t\tp\t\tq\n\n");
    printf("Original Pointers: \t%20d%20d", p, q);
    printf("\n\n");
    printf("Incremented Pointers:\t%20d%20d", p+1, q+1);
    printf("\n\n");
    printf("Pointer values:         %20d%20d", *p, *q);
    printf("\n\n");

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

这是它的输出:

                                    p                 q

Original Pointers:             132021776           132021776

Incremented Pointers:          132021796           132021780

Pointer values:                132021776                   1
Run Code Online (Sandbox Code Playgroud)
  • 指针p在递增时跳过20.这是因为它是一个类型的指针int(*)[5],因此sizeof(int) * number of columns在数组中跳转?

  • 二者pq使用与所述间接运算符时具有相同的值(但不同类型的),然而p,我并不在所述阵列的所述第一小区中获得的价值,而不是我得到的值 …

c arrays pointers

6
推荐指数
1
解决办法
163
查看次数

这个'realloc()的来源是什么:无效的下一个大小'错误

我已经阅读了这种类型的其他问题,但我仍然无法弄清楚为什么在我的代码中发生了这个错误.

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct {                 
    int len;
    int str[0];
} bit_str;

bit_str * input(void);
void print_bitstr(bit_str * s);

int main(void)
{
    bit_str * s1 = input();
    print_bitstr(s1);

    return 0;
}

bit_str * input(void)
{
    bit_str *s = (bit_str *) malloc(sizeof(bit_str)); 
    int count = 0, bit;

    while ((bit = getchar()) != 'k'){
        s = (bit_str *) realloc(s, sizeof(*s) + sizeof(int));           
        s->str[count++] = bit - 48;
    }

    s->len = count;
    return s;
}

void print_bitstr(bit_str * s)
{ …
Run Code Online (Sandbox Code Playgroud)

c realloc

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

标签 统计

c ×4

arrays ×2

pointers ×2

realloc ×1

scanf ×1