C
Linuxで関数のベクトルに文字列 (C++ ではない) を作成する単純な関数を作成しますexecvp
。
これは私のコードです:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char** vecting(char *cstring) {
int w_count = 0; //word count
char *flag = cstring;
while (*flag != '\0') {
if (*flag == ' ' || *flag == '\n' || *flag == '\t')
*flag = '\0';
flag++;
else {
w_count++;
while (*flag != ' ' && *flag != '\n' && *flag != '\t' && *flag != '\0')
flag++;
}
}
char **cvector = (char **)malloc(sizeof(char *)*(w_count+1));
cvector[w_count] = NULL;
int v_count; //vector count
for (v_count = 0, flag = cstring; v_count < w_count; v_count++) {
while (*flag == '\0')
flag++;
cvector[v_count] = flag;
while (*flag != '\0')
flag++;
}
return cvector;
}
int main()
{
char *p = "This is a BUG";
char **argv = vecting(p);
char **temp;
for (temp = argv; *temp != NULL; temp++)
printf("%s\n", *temp);
return 0;
}
実行すると、Segmentation fault
.
それから私はそれをデバッグします, 私はちょうど見つけました, 実行すると
*flag = '\0'; //(in line 12)
プログラム受信信号 SIGSEGV、セグメンテーション違反。
その時*flag = ' '
プログラムの変更時にプログラムがシグナル SIGSEGV を受信した理由がわかりませんでしたcstring