C. Malloc И String
Я как-то криво скопировал предыдущий код:
использовал Malloc, чтобы создать массив строк, но он создался как Int (в коде видно).
В общем, он работает, поэтому я его и не заметил (+ не слишком опытен).
Задача:
Я хочу удалить последний символ (или принт сделать так, чтобы последний элемент игнорить ИЛИ как-то по-хитрому присвоить такую же строку без последнего элемента) M[i]-го элемента (все М[i]-строки).
А так как я создал всё криво, я без понятия, как с этим работать.
Не могли бы вы подсказать, что делать без полного переделывания ?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
//для сохранения input
char res[400]="";
FILE* input = fopen("input.txt", "r");
FILE* output = fopen("output.txt", "w");
// само считывание
if (input != NULL) {
fgets(res, 400, input);
fclose(input);
}
//массив для "СЛОВ"
//////---------------------------------------------------
int size_M = 500;
int* M = (int*)malloc(size_M * sizeof(int));
//для размера/ количества элементов
int index_M = 0;
//////---------------------------------------------------
// Заполняю М с помощью strtok
char sep[] = " ";
char* small = strtok(res,sep);
while (small != NULL)
{
M[index_M] = small;
index_M++;
small = strtok(NULL, sep);
}
for (int i = 0; i < index_M; i++) {
printf("%s-",M[i]);
}
fclose(output);
}
Ответы (1 шт):
Постановка задачи:
"Я хочу удалить последний символ M[i]-го элемента"
у Вас присваивание M[index_M] = small; происходит толко в одном месте. Причём, больше ни для чего, кроме как для печати на экране, M[] не используется.
Логично именно здесь сразу присваивать "элемент без последнего символа".
Как бы это сделать? я бы написал так
// "на коленке" считаем длинну строки
int small_len=0;
while(!small[small_len++]);
small_len--;
// если длинна больше 1 - то откусываем последний символ и делаем присваивание
if (small_len>1){
small[small_len-1]=0;
M[index_M] = small;
index_M++;
}
Попробуйте прогнать на каком то примере, может, я и не сильно ошибся :-)