|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
ошибка преобразования char01.12.2010, 04:28. Показов 3582. Ответов 24
Метки нет (Все метки)
помогите найти ошибку(или исправить):
#include<iostream> #include<string.h> #include<conio.h> #include<stdio.h> #include<stdlib.h> using namespace std; typedef char *pChar; typedef char **ppChar; FILE*out1,*out2,*out3; void main() {out1=fopen("text1.txt","r"); out2=fopen("text2.txt","r"); out3=fopen("text3.txt","w"); int i,j,m,n,kolstrA,kolstrB; char in[80]; char an[80]; char*pa[100]; char*pb[100]; char*pc[100]; char*pk[100]; char a[100][80]; char b[100][80]; char c[200][80]; for (kolstrA=0;kolstrA<100;kolstrA++) {if(fgets(in,80,out1)==NULL) {break;}; in[80]='\0'; strncpy(a[kolstrA],in,80);}; fclose(out1); for(kolstrB=0;kolstrB<100;kolstrB++) {if(fgets(an,80,out2)==NULL) {break;}; an[80]='\0'; strncpy(b[kolstrB],an,80);}; fclose(out2); for(i=0;i<=kolstrA;i++) {pa[i]=a[i];}; for(j=0;j<=kolstrB;j++) {pb[j]=b[j];}; for(m=0;m<=(kolstrA+kolstrB);m++) {pc[m]=c[m];}; i=0; j=0; m=0; for(i=0;i<=kolstrA-2;i++) for(j=i+1;j<=kolstrA-1;j++) {if(strcmp(pa[i],pa[j])<0) {strcpy(pk,pa[i]); strcpy(pa[i],pa[j]); strcpy(pa[j],pk);};}; for(i=0;i<=kolstrB-2;i++) for(j=i+1;j<=kolstrB-1;j++) {if(strcmp(pb[i],pb[j])<0) {strcpy(pk,pb[i]); strcpy(pb[i],pb[j]); strcpy(pb[j],pk);};}; do {if(strcmp(pa[i],pb[j])<0) {pc[m]=pa[i]; i=i+1; m=m+1;} else {pc[m]=pb[j]; j=j+1; m=m+1;};} while(i<kolstrA||j<kolstrB); while(j<=kolstrB) {pc[m]=pb[j]; j=j+1; m=m+1;}; while(i<=kolstrA) {pc[m]=pa[i]; i=i+1; m=m+1;}; cout<<"rezultat"<<"\n"; for(m=0;m<(kolstrA+kolstrB);m++) {printf("%s\n",pc[m]);}; return; } error C2664: strcpy: невозможно преобразовать параметр 2 из 'char *[100]' в 'const char *' Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
0
|
|
| 01.12.2010, 04:28 | |
|
Ответы с готовыми решениями:
24
Ошибка "error C2446: :: нет преобразования "int" в "char *" Преобразования char в double Преобразования с char в string |
|
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||||||||||||||||||||||||||||
| 02.12.2010, 23:09 | |||||||||||||||||||||||||||||||||||||
|
там этот do ... while() начинается, а i и j не инициализируются нулями, то есть они остались с предыдущего цикла
внутри цикла условие такое, что когда один из массивов закончится, то значения из него будут продолжать сравниваться, соответственно, если условие сработает, будет выход за край
отступы очень важны, это не просто так делают
0
|
|||||||||||||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|||||||||||
| 05.12.2010, 02:31 [ТС] | |||||||||||
|
Спасибо, уже лучше, частично заработало(сортирует пузырьком оба файла). но вот слияние не хочет сделать...
в цикле do while вроде бы все долдно быть нормально, ибо аналогичная прога для массива чисел работает. на данный момент:
Добавлено через 42 минуты и если поменять, как вы сказали, здесь
и пузырек с такими циклами работает. если можно, подскажите, как исправть ошибку, а не только строчку, где она содержится.потому как не всегда понятно, что исправлять следует.
0
|
|||||||||||
|
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||||||||||||
| 05.12.2010, 09:48 | |||||||||||||||||||||
|
не должно быть различий в размерах массивов, либо везде 80, либо везде 81
в результате получается перекос, если в in попадёт 80 нормальных символов, то 81 делается нуль-символом in[80]='\0'; - это 81й символ прикинь, в строку, где может быть 79 символов, копируется 80 символов, 80й попадает на место нуль-символа, это значит, что функцию сравнения нельзя применять к такой строке, потому что функция сравнения strcmp() для обеих строк концы определяет по нуль-символам в них это значит, что при сравнении, если она дойдёт до конца массива, она выйдет за его пределы и будет дальше сравнивать, пока за его пределами не встретит байт со значением равным нулю поэтому везде либо 80, либо 81, но не по-разному
из этого же цикла pa[i], представь, если i == 100, это будет обращение к 101му элементу, в то время как char*pa[100]; содержит только сто элементов
ты когда, например, прочитала три строки из файла, у тебя kolstrA равно не три, а два а зачем тебе два, если у тебя три ? поэтому тебе нужно либо fgets() перенести в условие цикла из тела, либо при выходе из цикла, когда файл закончился, наращивать kolstrA
0
|
|||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
| 05.12.2010, 16:53 [ТС] | |
|
размеры массивов я поменяла, как вы сказали. про обращение к 100му и 101 элементу-он два отдельных массива сортирует и с этим значениями. в файлах у меня сильно меньше, чем 100 строк.
видимо, в do-while или while где то ошибка, (до этого этапа ведь все работает)но я никак ее не найду. Добавлено через 7 минут Если быть точнее, то в каждом файле по 10 строк. для простоты. 100*80-просто максимум. Вряд ли при этом он до 100 дойдет... Добавлено через 8 минут И, как ни странно, отдельно взятым файлам с малым числом коротких строк все равно, 80 там или 81...ничего не меняется. Как сделать так, чтобы она хотя бы эти два коротких файла сливала? (Логические ошибки про ста строках не так важны, мне бы хоть что-то сдать)
0
|
|
|
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||||||||||||||
| 05.12.2010, 22:54 | |||||||||||||||||||||||
но сортировка всё равно должна выглядеть
для этого можно специально вывести kolstrA перед теми циклами, где оно задаёт границу
меньше, чем сто строк? а ты думаешь, если он прочитал десять строк, там не будет того же самого? будет, только обращаться он будет не к 101й строке, а к 11й, которой там нет поменяешь всё на 80 и всё
а pa[kolstrA] элемента там нет, pb[kolstrB] элемента тоже нет а если их там нет, зачем они сравниваются ? а равные строки вообще не сохраняются
0
|
|||||||||||||||||||||||
| 05.12.2010, 22:54 | |
|
Нет преобразования int в char* функция для преобразования __time64_t в char *
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|