Набор задач cs50, над которым я работал, отправил меня в кроличью нору. Я новичок в программировании, и я работал над программой в c, чтобы поместить результат get_string в двумерный массив, с каждым словом, разделенным в массиве (что действительно не относится к проблеме cs50 set, так что не беспокойтесь об этом). Несомненно, более простые и лучшие способы добиться того, что я пытаюсь сделать, но для этого эксперимента я просто хочу знать, чего мне не хватает.
Насколько я могу судить (с моими многочисленными отладочными printf), первая часть функции верна: создается массив с достаточным объемом памяти для: а) хранения всех слов по отдельности и б) хранения самого большого слова в get_string.
Вторая часть предназначена для подсчета длины get_string, присваивая каждому символу соответствующий индекс во вновь созданном массиве. Вот где у меня проблемы. Я каждый раз сталкиваюсь с ошибкой сегментации в разных местах в зависимости от того, что находится в get_string.
Я ввел в функцию несколько случайных строк, чтобы проверить ее.
«Они посчитали буквы алфавита одну за другой». Это останавливается на пробеле после «они».
«Мне нравится мороженое» останавливается после «нравится»,
«Ароматизатор» останавливается прямо перед «r».
Когда Я использую debug50 (в IDE cs50), я могу еще несколько раз довести программу до l oop, приостановив ее перед запуском проверки "isspace".
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void readLevel();
int main(void)
{
// string text = get_string("Text:\n");
readLevel();
}
void readLevel()
{
/* you can ignore all this
int l = 0; //letters per 100 words
int s = 0; //number of sentences per 100 words
int indx = 0.0588 * l - 0.296 * s - 15.8;
*/
string text = get_string("Text:\n");
string sizeTextCopy = text;
string sortTextCopy = text;
//debug prints
printf("size copy is: %s\n", sizeTextCopy);
printf("sort copy is: %s\n", sortTextCopy);
//
int a = 0;
int b = 0;
int bsz = 0;
for (int c = 0; strlen(sizeTextCopy) > c; c++)
{
char sTCChar = sizeTextCopy[c];
if (isspace(sTCChar))
{
//debug prints
printf("b is : %i\n", b);
printf("a is : %i\n", a);
//
b++;
a++;
while (b > bsz)
{
bsz = b;
//debug prints
printf("bsz is : %i\n", bsz);
//
}
b = 0;
}
else
{
//debug prints
printf("b is : %i\n", b);
//
b++;
}
}
string firstArr [a][bsz];
int i = 0;
int t = 0;
//debug prints
int sTCL = strlen(sizeTextCopy);
printf("strlen is: %i\n", sTCL);
for (int w = 0; strlen(sizeTextCopy) > w; w++)
{
char textsortchar = text[w];
//debug prints
printf("tsc is %c\n", textsortchar);
printf("%i\n", w);
if (isspace(textsortchar))
{
firstArr [i][t] = &textsortchar;
i++;
//debug prints
printf("letter %i of word %i is : %s\n", t, i, firstArr[i][t]);
//
t = 0;
}
else
{
firstArr [i][t] = &textsortchar;
//debug prints
printf("letter %i of word %i is : %s\n", t, i, firstArr[i][t]);
//
t++;
}
}
// this was to print out the array, but ^that^ doesn't work yet.
for (int s111 = 0; a > s111; s111++)
for (int s112 = 0; s112 < sizeof(firstArr[s111]); s112++)
printf("%s", firstArr[s111][s112]);
}
Пожалуйста, не убивайте меня из-за моего кода. Буквально на прошлой неделе я запустил cs50. На самом деле я не прошу лучшего кода или того, что написано плохо, я просто хотел бы знать, почему это ошибки. Спасибо, что заглянули.