我正在尝试构建一个函数,该函数接收两个数字字符串(如charstrArr[2] = {"1, 2, 3, 4, 5", "4, 5, 6, 7, 8"}
(并对其进行解析。在编写函数时,我遇到了一个seg错误,我已经确定了seg错误的确切行,并省略了该行之后的所有内容。
有问题的行是一个strtok
调用,它接收了第一个字符串和一个分隔符。有人知道发生了什么吗?
有问题的代码:
void FindIntersection(char * strArr[]) {
int nel1 = 1;
int nel2 = 1;
int i = 0;
/*Determine the number of elements in strArr[0] */
while(strArr[0][i] != ' '){
if(strArr[0][i] == ','){
nel1++;
}
i++;
}
i = 0;
/* Determine the number of elements in strArr[1] */
while(strArr[1][i] != ' '){
if(strArr[1][i] == ','){
nel2++;
}
i++;
}
int intArr1[nel1];
int intArr2[nel2];
/* parse the elements from each char array and place them in int arrays */
char delim[2] = ", ";
char *token;
token = strtok(strArr[0], delim);
char strArr[2] = {"1, 2, 3, 4, 5", "4, 5, 6, 7, 8"};
如果这是实际的代码,那就不起作用了——它会创建一个 如果你拥有的实际上是 为了解决这个问题(假设你已经这样做了(,你可以按照以下片段使用相同的技巧: 换句话说,您可以创建一个多维字符数组,而不是指向不可修改字符串文字的一维字符指针数组。 下面使用此方法为您提供了一组可修改的字符串,不过您需要注意第二个维度是否足够大,以容纳将用于初始化数组的所有文字(足够容纳所有字符加上一个用于char
数组,而不是char
指针的数组char *strArr ...
(一个指针数组(,那也不起作用。修改字符串文字是一种未定义的行为,strtok
通常就是这样编织它的魔力的。char *x = "123"; // a pointer to string literal you should not modify.
char x[] = "123"; // a string array you can modify.