Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: не допустимая инструкция !?  (Прочитано 8279 раз)
0 Пользователей и 1 Гость смотрят эту тему.
МАКСИМ.
Гость
« : 08-04-2006 08:52 » 

привет всем прогаммирующим!
у меня возникла проблема.
я написал функцию которая приписывает строку str2 в конец  строки str1.
но возникла проблема-после выхода из функции-выскакивает сообщение : "процессор NTVDM обнаружил недопустимую инструкцию.
.... ".
Объясните в чём дело ?

я работаю в Borland C++ 3.1.
вот код программы:   

#include <stdio.h>
#include <conio.h>

char* s1_s2(char *s1,char *s2);

void main()
{
   char str1[]="HELLO",str2[]="WORLD!";

   clrscr();

   printf(" str1=%s str2=%s\n",str1,str2);
   printf("\n New str1 =%s  \n",s1_s2(str1,str2));

   getch();//!!! после выход сообщения о не допустимой инструкции
}

/*функция которая приписывает строку s2 в конец  строки s1*/
char* s1_s2(char *s1,char *s2){
    int i,j;

  /**/
    i=j=0;
    while ( s1[ i ] != '\0' )
   i++;

    while( (s1[i++]=s2[j++]) !='\0') ;

   //  printf("\n< s1= %s s2=%s >",s1,s2 );

   return s1;
}
« Последнее редактирование: 13-12-2007 21:02 от Алексей1153++ » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 08-04-2006 09:13 » new

Тут ты переходиш область отведенную под переменную. В Дебаг режиме это фиксируется и при выходе из программы выдается сообшение об этом.
Давай разберемся:
Код:
char str1[]="HELLO",str2[]="WORLD!";
В такой записе под переменную компилятор отводит ровно то количество байт, которое указано при иницилизации. Т.е. "HELLO" будет занимать 6 байт. Получается,что компилятор под переменную str1 будет отводить 6 байт.
В своей функции ты добавляеш еше 5 байт. Т.е. переходиш область, отведенную компилятором под переменную.
Если ты например сделаеш так,
Код:
char str1[25]="HELLO",str2[25]="WORLD!";
То я думаю, программа не должна выскакивать с ошибкой в данном случае.
« Последнее редактирование: 08-04-2006 09:16 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 22-04-2006 14:53 » 

(комент)

ЧАВО
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines