использование измененной структуры в другой функции

#c

#c

Вопрос:

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

#define ogrNo "34"
#define hex "0123456789ABCDEF"

int bussNo;
void hexControlFonk();

struct Otobusler {
    int bussNumber;
    char bussHexNum[100][6];
};

int main() {
    srand(time(NULL));
    char numaraDeposu[10000][6] = { "" };
    struct Otobusler buss[1000];

    scanf("%d", amp;bussNo);
    for (int i = 1; i <= bussNo; i  ) {
        for (int j = 0; j < 4; j  ) {
            numaraDeposu[i][j] = hex[rand() % 16];
        }
        for (int k = 4; k >= 0; k--) {
            int l = k   2;
            numaraDeposu[i][l] = numaraDeposu[i][k];
        }
        numaraDeposu[i][0] = ogrNo[0];
        numaraDeposu[i][1] = ogrNo[1];
        strcpy(buss[i].bussHexNum[i], numaraDeposu[i]);
        buss[i].bussNumber = i;
        printf("%d-%sn", buss[i].bussNumber, buss[i].bussHexNum[i]);
    }
    hexControlFonk(buss[1000]);
    printf("%sn", buss[10].bussHexNum[10]);
}

void hexControlFonk(struct Otobusler buss[1000]) {
    for (int m = 1; m < bussNo; m  ) {
        for (int n = 1; n < bussNo; n  ) {
            if (strcmp(buss[m].bussHexNum[m], buss[n].bussHexNum[n]) == 0 amp;amp; n != m) {
                printf("%d,", n);
            }
        }
    }
    printf("%sn", buss[10].bussHexNum[10]);
}
 

Я создал программу, которая создает шестнадцатеричные числа для каждой шины. И они начинаются с 34 (номер моей школы), это работает нормально, но я не могу использовать модифицированную версию структуры hexControlFonk() . Эта функция проверяет, совпадают ли какие-либо 2 шестнадцатеричных кода. Но шина 10 в main и шина 10 в hexControlFonk не совпадают. Нужна помощь.

Комментарии:

1. Примечание: в массиве C индексы начинаются с 0, поэтому для struct Otobusler buss[1000]; индексов допустимы 0 ..999, а не 1 ..1000.

2. Пожалуйста, попробуйте использовать правильный прототип void hexControlFonk(struct Otobusler buss[1000]); вместо неправильного void hexControlFonk(); .

3. @Yunnosch хорошо, я это исправляю, но hexControlFonk(buss[1000]); выдает ошибку типа несовместимый тип для аргумента 1 ‘hexControlFonk’

4. Конечно, ваша функция ожидает массив, разложенный на указатель, и вы предоставляете одну из записей. Ну, на самом деле нет, вы предоставляете значение, считанное из-за пределов этого массива. Это неопределенное поведение и, кстати, все объясняет. Что вы все равно пытаетесь там сделать?

5. hexControlFonk(buss[1000]); ==> hexControlFonk(buss); . И если вы изменили прототип, как указано ранее, код даже не будет компилироваться, пока вы это не исправите.

Ответ №1:

Вот некоторые важные проблемы с вашим кодом (скомпилированный список из комментариев).
Как вы уже подтвердили, их исправление также решает вашу проблему.

  • Исправить неправильный прототип: void hexControlFonk(); -> void hexControlFonk(struct Otobusler buss[1000]);
  • Переместите объявление типа, необходимое для правильного прототипа, перед прототипом.
  • Комментарий WhozCraig: вызовите функцию правильно, с массивом (фактически с указателем на него); hexControlFonk(buss[1000]); ==> hexControlFonk(buss); `
  • Комментарий Вернера Хенце: (рассмотрено выше) Не вызывайте функцию со значением, считанным из-за массива, т. Е. С индексом из допустимого диапазона 0 … 999, а не 1000.

Комментарии:

1. Спасибо за подтверждение. Чего-нибудь еще не хватает в ответе, чтобы полностью ответить на ваш вопрос?

2. извините, я этого не знал. Кроме того, английский не является моим основным языком, поэтому, если я сказал что-то странное, простите меня