Я пытаюсь сделать простой код, который преобразует один тип данных в другой. Я использую strtok
для извлечения одной части данных, а затем я запускаю длинный серийный номер if
условий, чтобы найти правильный выход. Однако, когда правильный вывод найден и записан в переменной currentNote
, он также, кажется, перезаписывает переменную comma
по той причине, которую я не могу понять. Здесь не является проблематичной частью кода:Как предотвратить strcpy от перезаписи другой переменной?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char sequence[] = "c1[M],c1[M],d3[L],c3[M],b2[M],(#A-2)[IKN],(#A-1)[L]";
char copy[] = "";
char *comma;
char currentNote[4] = "";
strcpy(copy, sequence);
comma = strtok(copy, ",");
if(strstr(comma, "c1") != 0) //c1
{
printf("%s\n\n", comma); //Here ...
strcpy(currentNote, "C5 ");
printf("%s\n\n", comma);
}
return 0;
}
И вот результат:
c1[M]
cC5
Нет необходимости говорить о том, что strcpy(currentNote, "C5 ");
вызывает его. Я не знаю, почему, хотя, я думал, что он вернет c1[M]
, как я бы хотел. После нескольких экспериментов выясняется, что второй printf("%s\n\n", comma);
всегда будет возвращать первый символ sequence
, за которым следует C5
. Надеюсь, кто-то узнает, это было бы очень здорово.
Возможно, дайте 'copy' некоторую память для хранения вещей в –
Это не компилируется. Где объявляется 'currentNote'? – ikegami
'strcpy (копия, последовательность)' не годится. 'copy' не хватает места. – ikegami