Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2012, 11:40   #1
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию strcpy| программирование под Unix

Здравствуйте, есть код, в котором я копирую строку, компилируется без ошибок, но при выполнении программы функция strcpy выдает такое сообщение: "Ошибка сегментирования"
Подскажите в чем может быть дело. В командную строку записываю asdf
Вот код:
Код:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main ( int argc , char *argv[] ) {
char *arg;
	for( int i = 1; i < argc; ++i){
		
	    if ( argv[i][0] != '-' ){
			
			arg = malloc(strlen(argv[i])+1);
			arg = "text";
			printf("Параметр - %s \n", arg);
			printf("Параметр - %s \n", argv[i]);
			strcpy( arg, argv[i]);
			printf("Параметр - %s  \n", arg);
			printf("Параметр - %s \n", argv[i]);
			
		}
		
	}
    return 0;
}
Злостный анимешнег =^.^=

Последний раз редактировалось Демик; 28.03.2012 в 11:41. Причина: уточнил
Демик вне форума Ответить с цитированием
Старый 28.03.2012, 12:12   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
arg = "text";
нельзя так.
вы присвоили указатель, а не символы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.03.2012, 12:23   #3
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию

Спасибо, помогло.
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 28.03.2012, 12:23   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Демик
Код:
arg = "text";
strcpy( arg, argv[i]);
константный строковой литерал пытаешься изменить

писать
Код:
arg = "text";
никто не запрещает, главное потом не менять эту память
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 29.03.2012, 14:47   #5
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

Нужно добавить очистку памяти
rmv240899 вне форума Ответить с цитированием
Старый 29.03.2012, 22:41   #6
Демик
Форумчанин
 
Аватар для Демик
 
Регистрация: 30.01.2011
Сообщений: 231
По умолчанию

Цитата:
Сообщение от rmv240899 Посмотреть сообщение
Нужно добавить очистку памяти
А как это делается?
Злостный анимешнег =^.^=
Демик вне форума Ответить с цитированием
Старый 30.03.2012, 15:14   #7
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Цитата:
Сообщение от Демик Посмотреть сообщение
А как это делается?
free(arg);
onewho вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
UNIX. Профессиональное программирование mihali4 Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 3 01.07.2013 02:04
Язык С под Unix. Roukert Фриланс 0 23.12.2011 16:25
Программа на Си под Unix zloy_da4mik Фриланс 0 06.12.2010 14:26