Код, над которым я работаю, нуждается в векторе удвоений в качестве ввода, и я пытался сделать его переменным размером, используя this small library Я нашел на git. Первая итерация с использованием строк вместо двойников является:память перезаписывается при чтении строк в c
printf("Write vector components (type 'stop' to stop): \n");
int stop = 0;
while (!stop)
{
fgets(c, sizeof(c), stdin);
if (strcmp("stop\n",c)!=0)
{
vector_add(&v, c);
} else {
stop = 1;
}
}
Однако, когда я печатаю результат (например, с 3 входами и «стоп») Я получаю
the vector is: stop stop stop
Я пытался пишите первый компонент каждый раз, когда я ввожу новый, и результат состоит в том, что последний перезаписывает первый (и по расширению, учитывая конечный результат, каждый компонент).
Однако этого не происходит, если я использую vector_add
вручную. Например, я попытался комбинируя пример из мерзавца и моего собственного кода и полного вывода является:
emil hannes lydia olle erik stop stop stop stop
Так он переписывает только при чтении. Я даже не могу понять, что происходит. За два года я не написал C, и я начинаю все заново.
Полный код (не включая векторной библиотеки):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "vector.c"
void main(int argc, char* argv[]) {
char c[20];
vector v; vector_init(&v);
printf("Write vector components (type 'stop' to stop):\n");
int stop = 0;
while (!stop)
{
fgets(c, sizeof(c), stdin);
if (strcmp("stop\n",c)!=0)
{
vector_add(&v, c);
// printf("%s\n", (char*)vector_get(&v, 0));
} else {
stop = 1;
}
}
printf("The vector is:\n");
for (int i = 0; i < vector_count(&v); i++) {
printf("%s\n", (char*)vector_get(&v, i));
}
} /* main */
Пытались ли вы к шагу через код построчно с помощью отладчика? –