Я знаю, что строки - это просто массив символов со смежными адресами памяти. Итак, когда у вас есть массив символов:
char s[5];
s[0] = '1';
s[1] = '2';
s[2] = '3';
s[3] = '4';
s[4] = '5';
и измените массив символов в s[1] на «5», тогда печать такого массива должна вернуть «15345». Теперь мой вопрос касается функций scanf и strtol. Когда я дважды вставляю значения в массив с помощью scanf, используя строки разного размера, почему функция strtol не преобразует ВЕСЬ массив?
Вот мой код в качестве примера:
#include <stdio.h>
#include <stdlib.h>
int main(){
char bytes[5];
printf("enter size 1: ");
scanf("%s", bytes);
printf("the size is: %ld\n", strtol(bytes, NULL, 10));
printf("enter size 2: ");
scanf("%s", bytes);
printf("the size is: %ld\n", strtol(bytes, NULL, 10));
return 0;
}
Итак, представьте эти пользовательские данные:
10000
затем программа распечатает «размер 10000»
затем пользователь вводит:
100
затем программа печатает "размер равен 100"
почему он снова не печатает «размер 1000»? Я сохранил только 100 байтов, разве остальные элементы массива байтов из первого ввода не должны оставаться неизменными, а strtol должен правильно преобразовать остальную часть массива?
На мой взгляд, когда программа сохраняет первый ввод 10000 байтов в массив, это выглядит в тот момент так
байты = {1,0,0,0,0}
затем, когда пользователь вводит 100, массив выглядит так же, поскольку он изменил только значения первых 3 элементов, а остальная часть массива должна остаться прежней:
байты = {1,0,0,0,0}
с этим strtol преобразует весь массив в 10000, верно?
Действительно ли scanf «очищает» остальную часть массива при сохранении значений в один и тот же адрес памяти?