0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
1 | |
ошибка преобразования char01.12.2010, 04:28. Показов 2782. Ответов 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 Оператор преобразования типа в char* |
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
01.12.2010, 04:49 [ТС] | 3 |
Заменила:
char*pk[80]; и {if(strcmp(pa[i],pa[j])<0) {strcpy(pk[1],pa[i]); strcpy(pa[i],pa[j]); strcpy(pa[j],pk[1]);};}; теперь появилась debug error "Run-Time Check Failure #3 - The variable 'pk' is being used without being initialized." а с этим как бороться?
0
|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
01.12.2010, 20:53 [ТС] | 5 |
переделала, стало так:
#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,kolstrA,kolstrB; char in[81]; char an[81]; char*pa[100]; char*pb[100]; char*pc[100]; char pk[80]; char a[100][80]; char b[100][80]; char c[200][80]; for (kolstrA=0;kolstrA<100;kolstrA++) {if(fgets(in,81,out1)==NULL) {break;}; in[80]='\0'; strncpy(a[kolstrA],in,80);}; fclose(out1); for(kolstrB=0;kolstrB<100;kolstrB++) {if(fgets(an,81,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; } но вот теперь на экране при запске нечто странное выдается, вроде скобок квадратных, в большом количетсве, но не бесконечно.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||
01.12.2010, 23:37 | 6 | ||||||||||
у тебя напутано с размерами
0
|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
02.12.2010, 00:09 [ТС] | 7 |
int i,j,m,kolstrA,kolstrB;
char in[81]; char an[81]; char*pa[100]; char*pb[100]; char*pc[100]; char pk[80]; char a[100][80]; char b[100][80]; char c[200][80]; for (kolstrA=0;kolstrA<100;kolstrA++) {if(fgets(in,sizeof in,out1)==NULL) {break;}; strcpy(a[kolstrA], in); заменила: #if 0 strncpy(a[kolstrA], in, strlen(in)); a[kolstrA][strlen(in)] = '\0'; #endif }; fclose(out1); for(kolstrB=0;kolstrB<100;kolstrB++) {if(fgets(an,sizeof an,out2)==NULL) {break;}; strcpy(b[kolstrB], an); #if 0 strncpy(b[kolstrB], an, strlen(an)); b[kolstrB][strlen(an)] = '\0'; #endif }; fclose(out2); теперь все указатели получаются неправильными - Нарушение прав доступа при чтении "0xcccccccc"
0
|
5 / 5 / 1
Регистрация: 19.05.2009
Сообщений: 23
|
|
02.12.2010, 00:16 | 8 |
Попробуй выводить не printf("%s", pc[m]), а так printf("%c", pc[m]).
Объясняю - ты выводишь в цикле строчку, а т. к. у тебя масив символов, то ты и должна выводить символы, а не строчки. Да и в следующий раз структурируй код, и пользуйся тегами для кода. Так легче и быстрее найти ошибку, и это также привкус хорошего программиста
0
|
5 / 5 / 1
Регистрация: 19.05.2009
Сообщений: 23
|
|
02.12.2010, 00:36 | 11 |
0
|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|||||||||||
02.12.2010, 00:56 [ТС] | 12 | ||||||||||
а так:
возможно, я что-то опять не поняла.
0
|
5 / 5 / 1
Регистрация: 19.05.2009
Сообщений: 23
|
||||||
02.12.2010, 01:08 | 13 | |||||
Добавлено через 4 минуты Выложи свои текстовые файлы
1
|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
02.12.2010, 01:25 [ТС] | 14 |
да это скорее набор букв, чем тексты.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|||||||||||
02.12.2010, 02:17 | 15 | ||||||||||
почему бы просто не обменять указатели ? зачем копировать строки, меняя их местами ?
точку с запятой нужно ставить только после цикла do ... while (); после циклов for {}, while() {} и после условий if {} точку с запятой ставить не нужно
0
|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
02.12.2010, 02:43 [ТС] | 16 |
А для массива с[m] как тогда сделать? там ведь слияние
0
|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
02.12.2010, 03:04 [ТС] | 18 |
Задание требует указателей. Только что с strcpy, что без нее строки не выводятся. Уже все перепробовала, даже не знаю, что еще сделать
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
02.12.2010, 04:57 | 19 |
Сообщение от student101
неправильные границы циклов неправильное использование strncpy() цикл do ... while() что делает ? логическая ошибка массив содержит только 100 указателей, а вывод в конце устанавливает границу kolstrA + kolstrB, в массивах a и b может быть по 100 строк в каждом, следовательно граница получается до 200
0
|
0 / 0 / 0
Регистрация: 24.11.2010
Сообщений: 17
|
|
02.12.2010, 21:06 [ТС] | 20 |
Цикл do while у меня должен выполнять слияние массивов в один. Потом в случае, если один массив закончится, еще два while для каждого массива.
А где неправильные границы циклов? подскажите, пожалуйста, я не понимаю...
0
|
02.12.2010, 21:06 | |
02.12.2010, 21:06 | |
Помогаю со студенческими работами здесь
20
Нет преобразования int в char* функция для преобразования __time64_t в char * Кривое преобразования с int в char, массивы Как работают явные преобразования из char[] в int? Преобразования массива с типа int к типу char Функцию преобразования char строки в действительное число Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |