Следующее упражнение 10.4 книги «Программирование на C» Стивена Кочана. В нем говорится, что я должен создать функцию, которая выводит часть из входной строки и возвращает эту часть обратно в main()
(как строку, а не указатель) и отображает ее. Мой код ниже.Простая программа C. Строка, возвращающаяся из функции, вызывает ошибку
#include <stdio.h>
char subString (const char source[], int start, int count, char result[count + 1]){ //result will be number of characters (count) + 1 (because of null)
int i, j, end = start + count;
// the part excluded must start from i = start and "count" number of characters must be derived and then put on result
for(i = start, j = 0; i < end; ++i, ++j)
result[j] = source[i];
result[j] = '\0';
return result[count + 1];
}
int main (void){
char result[20] = {0};
const char text1[] = "character";
result[20] = subString(text1, 4, 3, result);
printf("From \"%s\" this part is being excluded-> \"%s\"\n", text1, result);
return 0;
}
И выход
From "character" this part is being excluded-> "act"
Process returned 0 (0x0) execution time : 0.332 s
Press any key to continue.
Обратите внимание, что приведенный выше код работает отлично - никаких предупреждений.
Что я не могу понять, когда я заменить две строки ниже
result[20] = subString(text1, 4, 3, result);
printf("From \"%s\" this part is being excluded-> \"%s\"\n", text1, result);
с этой линией
printf("From \"%s\" this part is being excluded-> \"%s\"\n", text1, subString(text1, 4, 3, result));
я получить выход:
From "character" this part is being excluded-> "(null)"
Process returned 0 (0x0) execution time : 0.332 s
Press any key to continue.
Почему это ? Как я могу заставить его работать с использованием одной строки? Кроме того, я немного смущен функциями, возвращающими строки/массивы. Они, как правило, приводят меня к ошибкам, поэтому, если кто-то может предоставить мне пару предложений, которые я всегда должен учитывать при работе с ними, это очень помогло бы мне. Заранее спасибо.
Нет допустимого элемента, называемого 'result [20]'. Подсказка: индекс на основе '0'. –
Возможно, вам необходимо проверить работоспособность параметров и убедиться, что start + count не выходит за пределы исходной строки. И цикл должен быть de-obfuscated в это: 'for (i = 0; i
Lundin
@Sourav Ghosh Я инициализировал строку с 20 местами в памяти и поместил в него нуль, потому что кто-то сказал мне здесь некоторое время назад, что я всегда должен заполнять нулевые терминаторы в них, когда я их инициализирую (независимо от размера), поскольку это хорошая практика программирования. –