C 字符串操作在print语句中时返回正确的值,在删除时中断
我有以下代码来解析URL: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
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]代码>