Я пишу код C для класса. Этот класс требует, чтобы наш код компилировался и запускался на школьном сервере, который является машиной с солярием. Я запускаю Linux x64.Strcpy() повреждает скопированную строку в Solaris, но не Linux
У меня есть эта линия для синтаксического анализа (ЭТО НЕ АКТУАЛЬНО КОД, НО ВХОД В моей программе):
while (cond1){
мне нужно, чтобы захватить «а» и «COND1» на отдельные строки. Я использовал strtok()
для этого. В Linux, следующие строки:
char *cond = NULL;
cond = (char *)malloc(sizeof(char));
memset(cond, 0, sizeof(char));
strcpy(cond, strtok(NULL, ": \t\(){")); //already got the "while" out of the line
правильно захватить строку «COND1» .Running это на Солярис машине, однако, дает мне строку «cone1».
Обратите внимание, что во многих других случаях в моей программе строки копируются правильно. (Например, «while») было зафиксировано правильно.
Кто-нибудь знает, что здесь происходит?
Сделайте что-то вроде 'char * token = strtok (NULL," stuff ");' затем выделите свой новый буфер как 'cond = (char *) malloc (strlen (токен) +1);' then 'strcpy (cond , токен); 'Вы сохраняете некоторую память в зависимости от того, как долго сохраняются эти жетоны, и если входная строка оказывается монстром. – John
Проблема в том, что вы выполняете разделение и освобождение для каждого отдельного токена вместо каждой строки ввода (скорее всего, строки). Я подозреваю, что удар производительности за это перевешивает любой выигрыш в меньшей используемой памяти, если только линии не будут действительно огромными. Но это субъективная вещь и зависит от ваших потребностей, поэтому я не буду спорить слишком много. – paxdiablo
Напиши свой собственный strdup! –