Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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 字符串操作在print语句中时返回正确的值,在删除时中断_C_String_Pointers_Printf - Fatal编程技术网

C 字符串操作在print语句中时返回正确的值,在删除时中断

C 字符串操作在print语句中时返回正确的值,在删除时中断,c,string,pointers,printf,C,String,Pointers,Printf,我有以下代码来解析URL: char* getHost(char* url) { char ret_s[strlen(url)]; strcpy(ret_s, url); char* s = ret_s; char* finder = NULL; finder = strstr(s, "//"); if (finder!=NULL) { // strip http:// s = strstr(s, "//")+2; } f

我有以下代码来解析URL:

char* getHost(char* url) {
char ret_s[strlen(url)];
    strcpy(ret_s, url);
    char* s = ret_s;
    char* finder = NULL;

    finder = strstr(s, "//");
    if (finder!=NULL) { // strip http://
        s = strstr(s, "//")+2;
    }
    finder = strstr(s, "/");
    if (finder!=NULL) {
        s = strtok(s, "/"); // strip /yadda yadda
    }

    printf("\nSanity Print: %s\n", s);
    return s; // return /sample.htm
}
将函数“”与此处的打印一起传递将返回:

Sanity Print: www.cs.cf.ac.uk
Host: www.cs.cf.ac.uk (outside the function)
但是当打印被删除,而我在函数外部打印时,我得到

Host: w

有什么想法吗?

s
指向
charret_s[strlen(url)]这是一个具有自动存储持续时间的阵列。从函数返回时,数组存储将被丢弃,再次访问它将调用未定义的行为。

s
指向
char-ret_[strlen(url)]这是一个具有自动存储持续时间的阵列。从函数返回时,数组存储将被丢弃,再次访问它将调用未定义的行为。

s
指向
char-ret_[strlen(url)]这是一个具有自动存储持续时间的阵列。从函数返回时,数组存储将被丢弃,再次访问它将调用未定义的行为。

s
指向
char-ret_[strlen(url)]这是一个具有自动存储持续时间的阵列。当您从函数返回时,阵列存储将被丢弃,再次访问它将调用未定义的行为。

不会想到这一点,我让它malloc一些内存,这就解决了我的问题。谢谢@此外,要小心,你的
charret_s[strlen(url)]。。。strcpy(ret_s,url)。你需要
strlen(url)+1
。我没有想到,我让它占用了一些内存,这就解决了我的问题。谢谢@此外,要小心,你的
charret_s[strlen(url)]。。。strcpy(ret_s,url)。你需要
strlen(url)+1
。我没有想到,我让它占用了一些内存,这就解决了我的问题。谢谢@此外,要小心,你的
charret_s[strlen(url)]。。。strcpy(ret_s,url)。你需要
strlen(url)+1
。我没有想到,我让它占用了一些内存,这就解决了我的问题。谢谢@此外,要小心,你的
charret_s[strlen(url)]。。。strcpy(ret_s,url)。你需要
strlen(url)+1
。另外,
charret\s[strlen(url)]-->
charret_s[strlen(url)+1]同样,
charret_s[strlen(url)]-->
charret_s[strlen(url)+1]同样,
charret_s[strlen(url)]-->
charret_s[strlen(url)+1]同样,
charret_s[strlen(url)]-->
charret_s[strlen(url)+1]