#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. извините, я этого не знал. Кроме того, английский не является моим основным языком, поэтому, если я сказал что-то странное, простите меня