0

我在使用以下代码时遇到问题(我不知道 splitString 函数是否有效,因为我在调用它时遇到了段错误)。代码是:

#include <stdio.h>
//
//      Split String
//
int splitString(char** ret,char* instr, char* fence,int max) {
        char* p;
        int count=0;
        char* sinstr;
        char* cp;
        int i=0;

        while(i<max) {
                cp=ret[i];
                p=fence;
                sinstr=instr;
                while(1) {
                        if (*p=='\0') {
                                *cp='\0';
                                instr=sinstr;
                                break;
                        }
                        if (*p==*sinstr) {
                                p++;
                                sinstr++;
                                continue;
                        } else {
                                *cp=*instr;
                                cp++;
                                instr++;
                                break;
                        }
                }
                i++;
        }
        *cp='\0';
        return count;
}
int main (int argc, char* const argv[]) {
        char *strs[128];

        char* in="test.txt";
        splitString(strs,in,".",2);
        printf("fn: %s, ext: %s\n",strs[0],strs[1]); 
}

splitString 函数调用和 printf 都会出现段错误(如果我注释掉对 splitString 的调用,printf 会出现错误)。

我要做的是根据子字符串拆分字符串。该函数应该返回作为第一个参数传递给函数的数组中的子字符串。我知道我忽略了一些非常明显的东西,但我的 C 技能非常生疏。感谢任何指导。

4

3 回答 3

2

当然,您正在传入 strs ,并且它没有被初始化,并且 splitstring 假设数组指向实际的字符串,但它将是它的初始值(未定义的行为)

于 2012-12-22T21:10:18.283 回答
0

strs[128] 中的 128 个数组未初始化/分配。

尽管如此,您还是要取消引用它们,然后在它们实际指向的地址写入数据,此时这可能是任何东西。

您可以在拆分函数中动态分配它们,以便它们适合每个子字符串,因为您将指针传递给指向您的函数的那些指针。

于 2012-12-22T21:14:23.020 回答
0

你应该分配你的数组,(在主或函数中)

 char *strs[128];
于 2012-12-22T23:01:21.800 回答