Здесь я в основном пытаюсь ввести строку, разбить ее на отдельные слова и назначить каждое слово указателю char ptr[i]
. При выполнении следующего кода, если я ввожу строку из более чем одного слова, он показывает Segmentation fault (core dumped)
.
Я использовал gdb для отладки. Но после того, как я захожу в то время как время 2-й цикл, он показал Program received signal SIGSEGV, Segmentation fault. 0x0000003b64a81321 in __strlen_sse2() from /lib64/libc.so.6
Решение для него, чтобы выделить память для каждого ptr[i]
перед тем strcpy(ptr[i],cp);
использованием ptr[i]=new char[sizeof(cp)];
.
Но как это не требуется для выделения памяти для ptr [0]? Если я не выделяю память для ptr [0], есть ли какие-либо шансы перезаписать что-то еще? Я спрашиваю его из любопытства, я знаю, что всегда лучше выделять память.
Вот код:Ошибка сегментации в коде
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int i,j;
string s1;
getline(cin,s1);
char s[100],*ptr[10];
strcpy(s,s1.c_str());
char *cp;
cout<<"string is: "<<s1<<endl;
cp=strtok(s," ");
i=0;
while(cp!=NULL)
{ cout<<cp<<endl;
strcpy(ptr[i],cp);
cp=strtok(NULL," ");
i++;
}
for(j=0;j<i;j++)
{ cout<<ptr[j]<<endl;
}
return 0;
}
Здесь есть хороший вопрос о разделении строки. Ответы работают лучше, чем 'strtok'. – chris
@chris: Где? – user2672165
Если вы указали ссылку в «здесь», отредактируйте комментарий и измените, потому что это простое слово без ссылки. – Smith