[英]Vector from String causes Segmentation Fault
我正在嘗試將字符串轉換為向量。 我的代碼是:
char **my_str2vect(char *str)
{
char** vect;
char* temp;
int num_whitespaces = 0;
temp = str;
for(; *temp!= '\0'; temp++)
{
if(*temp == ' ')
{
num_whitespaces++;
}
}
vect = (char **)malloc((num_whitespaces+1)*sizeof(char *));
*vect = str;
for(; *str != '\0'; str++)
{
if(*str == ' ')
{
*str = '\0';
*vect = ++str;
vect++;
}
}
*vect = NULL;
return vect;
}
不幸的是我遇到分段錯誤。 我使用以下代碼調用該函數:
n = read(0, buffer, MAX-1);
buffer[MAX] = '\0';
if(n >= 0)
{
vect = my_str2vect(buffer);
}
您僅分配矢量,而不分配矢量的每種情況。 您可以為此使用calloc
。
您的代碼中有幾個錯誤:1.在my_str2vect
函數中,指針vect
被移動到分配的內存的末尾,因此當您返回vect並想在其中使用vect[1]
或vect[2]
時調用程序功能時,必須存在段故障。 在開始對vect
進行操作之前,可以使用vect_tmp
存儲原始位置。 2.開始轉換字符串時出現一些邏輯錯誤。 請參考下面我修改的代碼。
char **my_str2vect(char *str)
{
char** vect;
char** vect_tmp;
char* temp;
int num_whitespaces = 0;
temp = str;
for(; *temp!= '\0'; temp++)
{
if(*temp == ' ')
{
num_whitespaces++;
}
}
vect_tmp = (char **)malloc((num_whitespaces+1)*sizeof(char *));
vect = vect_tmp;
*vect = str;
for(; *str != '\0'; str++)
{
if(*str == ' ')
{
*str = '\0';
*(++vect) = str + 1;
}
}
*(++vect) = NULL;
return vect_tmp;
}
請注意,即使修改后,此功能仍無法處理某些連續空格的特殊情況。 您可能需要花費更多時間來改善兼容性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.