Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C中的子字符串复制函数导致seg_C_String_Fault - Fatal编程技术网

C中的子字符串复制函数导致seg

C中的子字符串复制函数导致seg,c,string,fault,C,String,Fault,我的函数subStr将字符串(src)的“part”th部分复制到另一个(out)上。尽管一切看起来都很好,但在使用该函数时,我遇到了一个分段错误。。。有人能帮忙吗?我曾尝试使用valgrind解决这个问题,但它不够具体,我无法找到解决方案 从注释中提供的链接粘贴的代码 while(*(src+i++)!=''{}//循环通过src的字节 //您需要检查您是否退出*src; 通过(…&&i

我的函数subStr将字符串(src)的“part”th部分复制到另一个(out)上。尽管一切看起来都很好,但在使用该函数时,我遇到了一个分段错误。。。有人能帮忙吗?我曾尝试使用valgrind解决这个问题,但它不够具体,我无法找到解决方案

从注释中提供的链接粘贴的代码

while(*(src+i++)!=''{}//循环通过src的字节

//您需要检查您是否退出*src; 通过(…&&i而(*(src+i++)!='''''{}//循环通过src的字节

//您需要检查您是否退出*src; 通过(…&&i
void subStr(char*src,char*out,int-part){
int i=0,j=0;
而(部分>1){
而(*(src+i++)!=''&*(src+i)!='\0'{}
第四部分;
}
j=i;
而((*(src+i)!=''和(*(src+i)!='\0'))
*(out+j++)=*(src+i++);
*(out+j)='\0';
}
int main(int argc,常量字符**argv){
char s[]=“我喜欢馅饼”;
chart[]=“我喜欢蛋糕”;
cout
void subStr(char*src、char*out、int部分){
int i=0,j=0;
而(部分>1){
而(*(src+i++)!=''&*(src+i)!='\0'{}
第四部分;
}
j=i;
而((*(src+i)!=''和(*(src+i)!='\0'))
*(out+j++)=*(src+i++);
*(out+j)='\0';
}
int main(int argc,常量字符**argv){
char s[]=“我喜欢馅饼”;
chart[]=“我喜欢蛋糕”;

cout问题解决了..只需要&&而不是|

问题解决了..只需要&&而不是|

这是函数,你能告诉我你给src和输出分配了多少内存吗?但是你能用main向我们展示整个代码吗?不管来自main的输入如何,它都不起作用。尽管你可以使用我的main:int main(){char test[999];subStr(“try number one”,test,2);printf(“%s\n”,test);return 0;}这是一个函数,你能告诉我你给src和output分配了多少内存吗?但是你能用main向我们展示整个代码吗?不管main的输入是什么,它都不起作用。尽管你可以用我的main:int main(){char test[999];subStr(“试试第一个”,test,2);printf(“%s\n”,test);return 0;}在main中,我想s和t char[]是这样声明的:“char*s=“…”和t相同?c++11不允许这样的文字转换,clang会警告您,这会导致segfault。ps:我假设您希望“替换”该部件。因此,添加了j=i。删除它,它将只输出“pie”,而不是“我喜欢pie”。我不确定您的主要目的是什么,我想s和t字符[]是这样声明的:“char*s=“。。。c++11不允许这样的文字转换,clang会警告你,这会导致segfault。ps:我假设你想“替换”这个部件。因此添加了j=i。去掉它,它只输出“pie”而不是“i like pie”。我不确定你到底要做什么
void subStr(char *src, char *out, int part) {           /*    subStr is a function that copies the "part"
                                                              substring of src to out and returns out's
                                                            address -- "parts" are strings seperated by spaces  */
    int i = 0, j = 0;

    while(part > 1) {

        while(*(src + i++) != ' ') {}                   // cycle through bytes of src

        part--;                                         // decrease "part" by one for every space found

    }                                                   // here we have reached the string we want to copy

    while((*(src + i) != ' ') || (*(src + i) != '\0'))  // copy till next space or end of string
        *(out + j++) = *(src + i++);

    *(out + j) = '\0';

}
void subStr(char *src, char *out, int part) {
    int i = 0, j = 0;
    while(part > 1) {
        while(*(src + i++) != ' ' && *(src + i) != '\0' ) { }
        part--;
    }
    j = i;
    while((*(src + i) != ' ') && (*(src + i) != '\0'))
        *(out + j++) = *(src + i++);
    *(out + j) = '\0';
}
int main(int argc, const char** argv) {
    char s[] = "i like pie";
    char t[] = "i like cake";
    cout << s << endl << t << endl;
    subStr(s, t, 3);
    cout << s << endl << t << endl;
    return 0;
}