2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 ошибка:Run-Time Check Failure #2 (на С)
Сообщение08.01.2013, 15:09 


22/12/12
54
Вот написал программу.
В нее задаются строки и размеры новых строк. потом она копирует заданные изначально строки в новые столько раз, чтоб в новой первоначальные строки повторялись, до тех пор пока длина новой строки не станет равной длине, заданной пользователем.(последнее вхождение можно укорачивать)
Например:
Дано:
строка: привет
длина: 10
результат:приветприв
код: [ скачать ] [ спрятать ]
Используется синтаксис C
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <limits.h>
#include <string.h>
#include <Windows.h>

void FillStr(char *s, int N)
{
        char str[CHAR_MAX]; // массив, хранящий в себе новую строку
        str[0] = '\0';
        int kol = N / strlen(s); // kol - количество целых вхождений строки s в строку размера N
        for (int i = 0; i < kol + 1;i++) //копирование в конец новой строки
                strcat(str,s);
        for (int i = 0; i < N; i++)//вывод строки на экран
        {
                printf("%c", str[i]);
        }
        printf("\n");
}
void main()
{
                setlocale (LC_CTYPE, "rus");
                char s[4][CHAR_MAX];//s - массив в котором хранятся строки
                int n[4]; //массив, хранящий длины новых строк
                printf("Введите строки: ");
                for (int i = 0; i < 5; i++) //ввод строк
                        gets(s[i]);
                for(int i = 0; i < 5; i++) // перекодировка для возможности использования русского языка
                        OemToCharA(s[i],s[i]);
                printf("Укажите длины конечных строк: ");
                for(int i = 0; i < 5; i++) // ввод длин новых строк
                {              
                        scanf("%d", &n[i]);
                }
                for(int i = 0; i < 5; i++) // выполнение задачи
                        FillStr(s[i],n[i]);
        _getch();
}

программа работает но в конце выдает ошибку(после получения правильного результата):
"Run-Time Check Failure #2 - Stack around the variable 's' was corrupted.",
а если вытащить .ехе файл, то он тоже нормально выполнит, но потом выдаст это:
Изображение

 Профиль  
                  
 
 Re: ошибка:Run-Time Check Failure #2 (на С)
Сообщение08.01.2013, 20:00 
Заслуженный участник


09/09/10
3729
Ну у вас границы цикла for неправильные. Почему i < 5?

 Профиль  
                  
 
 Re: ошибка:Run-Time Check Failure #2 (на С)
Сообщение09.01.2013, 13:33 


22/12/12
54
я уже нашел ошибку, надо было размер у массива n сделать равным 5, и у двумерного массива кол-во строк тоже надо было 5 сделать

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group