LINUX.ORG.RU

string.h


0

0

Выпадает segfault по такому коду:
#include <string>
...
char *p = "";
strcpy(p, argv[1]);
cout << p << endl;
...
В Linux толком не программил, компилирую
g++ -c main.cpp
g++ -o main main.o
может кто подскажет где копать, или там ещё с либой string-овской надо компилить? тогда с какой?

anonymous
Ответ на: комментарий от grustnoe

И куда же он показывает? Да если написать char *p = "qwerty"; , то тот же эфект...

anonymous
()

Делаем так:

#include <string> 
#include <iostream> 
using namespace std; 
int main(int argc, char** argv) { 
    char *p = new char[10]; 
    strcpy(p, argv[0]); 
    cout << p << endl; 
}

А вообще то я бы лучше сделал так:

#include <string> 
#include <iostream> 
using namespace std; 
int main(int argc, char** argv) { 
    string str; 
    str += argv[0]; 
    cout << str << endl; 
}

P.S. Кстати, компилить можно одной коммандой g++ -o main main.cpp

svyatogor ★★★★★
()
Ответ на: комментарий от anonymous

Как я понимаю потому что string это тип данных в плюсах, описывающий строку.

anonymous
()
Ответ на: комментарий от anonymous

Это более правильный с точки зрения C++ путь. string является объектом и содержит много полезных методов. В данном же случае главное вот что: когда ты создаешь масив char *p = new char[]; то ты не знаешь заранее размера строки которую в него запихнешь. Можно конечно ее посчитать и т.д., но морочно выходит. Можно заведомо больший размер масива дать (= new char[100]). Но тогда расходуешь напрасно память.

В случае же со string об этом не надо заботится, так внутренне он использует vector объект и динамически увеличивает/уменьшает размер по мере надобности.

Вообще советую почитать доки по Standart Type Library (STL). Там много полезного - string, vector и т.д.

svyatogor ★★★★★
()
Ответ на: комментарий от svyatogor

А где можно почитать про методы объекта string, man string не помог. Не нашел хотя бы метода, который возвращет длину строки.

anonymous
()
Ответ на: комментарий от svyatogor

:)) У меня чё-то аська пустая почти... Надо бы С/C++ девелоперов туда закинуть. Я С изучаю. Автор темы, дай свой icq тоже.

Selecter ★★★★
()
Ответ на: комментарий от svyatogor

точности ради, T в "STL" не Type, а Template

HTH

anonymous
()
Ответ на: комментарий от Selecter

176648689, только вот я в аське тоже не часто бываю. Хотя в послденее время...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.