2014 dxdy logo

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

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




 
 ошибка:Run-Time Check Failure #2 (на С)
Сообщение08.01.2013, 15:09 
Вот написал программу.
В нее задаются строки и размеры новых строк. потом она копирует заданные изначально строки в новые столько раз, чтоб в новой первоначальные строки повторялись, до тех пор пока длина новой строки не станет равной длине, заданной пользователем.(последнее вхождение можно укорачивать)
Например:
Дано:
строка: привет
длина: 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 
Ну у вас границы цикла for неправильные. Почему i < 5?

 
 
 
 Re: ошибка:Run-Time Check Failure #2 (на С)
Сообщение09.01.2013, 13:33 
я уже нашел ошибку, надо было размер у массива n сделать равным 5, и у двумерного массива кол-во строк тоже надо было 5 сделать

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group