Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 04:31   #1
student101
 
Регистрация: 29.11.2010
Сообщений: 5
По умолчанию преобразование типов char-const char

помогите найти ошибку(сортировка массива строк)
выводит:error C2664: strcpy: невозможно преобразовать параметр 2 из 'char *[100]' в 'const char *'
Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
#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;
}
student101 вне форума Ответить с цитированием
Старый 01.12.2010, 04:45   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Мне кажется что ошибка здесь
strcpy(pk,pb[i]);
strcpy(pb[i],pb[j]);
strcpy(pb[j],pk);
pk -это ведь указатель а вы хотите его использовать как строку
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 01.12.2010, 04:53   #3
student101
 
Регистрация: 29.11.2010
Сообщений: 5
По умолчанию

попыталась заменить:
char*pk[80];

и
{strcpy(pk[1],pa[i]);
strcpy(pa[i],pa[j]);
strcpy(pa[j],pk[1])

здесь выходит: Run-Time Check Failure #3 - The variable 'pk' is being used without being initialized.
student101 вне форума Ответить с цитированием
Старый 01.12.2010, 04:59   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

да не у тя там pk для замены тупо
обьяви pk как
char pk[80];
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 01.12.2010, 05:05   #5
student101
 
Регистрация: 29.11.2010
Сообщений: 5
По умолчанию

А при таком раскладе в компиляторе ошибок нет, но при запуске Run-Time Check Failure #2 - Stack around the variable 'an' was corrupted.
student101 вне форума Ответить с цитированием
Старый 01.12.2010, 05:10   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Попробуй обьяви
an как
char an[81];
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 01.12.2010, 05:19   #7
student101
 
Регистрация: 29.11.2010
Сообщений: 5
По умолчанию

А вот теперь он печатает нечто, похожее на множество квадратных скобок. может, там еще что-то не так в массиве с[m]?
student101 вне форума Ответить с цитированием
Старый 01.12.2010, 05:29   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

У тя ася есть??
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 01.12.2010, 20:45   #9
student101
 
Регистрация: 29.11.2010
Сообщений: 5
По умолчанию

Да, в профиле указана.
student101 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [7]' to 'LPCWSTR' . VS.NET PE kolob2000 Qt и кроссплатформенное программирование С/С++ 2 06.07.2010 18:51
Конвертирование из const char*(System::String) в LPCWSTR Eros Общие вопросы .NET 1 27.05.2010 12:36
Cтроки. Приведение типов. char * to float Aerial Общие вопросы C/C++ 3 28.04.2010 14:54
FastString::FastString(const char *psz) : m_psz(new char [strlen(psz) + 1]) { strcpy(m_psz, psz); } lebedun Общие вопросы C/C++ 3 27.03.2009 03:43
Преобразование TCHAR в CHAR. Игорь007 Общие вопросы C/C++ 2 13.10.2008 21:50