0
這是一個簡單的c程序,用於將url(形式爲www.blabla.com/blabla/..
)切割爲主機部分和路徑部分。我是fork
一個過程來完成這項工作,但孩子並沒有在屏幕上打印任何東西。這是代碼。子進程不打印任何東西
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
#include<errno.h>
#include<unistd.h>
main()
{
pid_t pid;
char url[300];
char* path;
char* host;
int n,status;
printf("Give me a url.\n");
scanf("%s",url);
pid=fork();
if (pid==0)
{
path=strchr(url, '/');
n=strlen(url)-strlen(path);
strncpy(host,url,n);
printf("path : %s \nhost : %s\n", path,host);
sleep(3);
exit(status);
}
else
{
wait(&status);
}
printf("Bye!\n");
}
我知道URL解析很弱,但這不是問題。我不明白爲什麼子進程的代碼不能執行。如果我將孩子的代碼(睡眠和等待除外)改成別的東西(簡單的就像印刷你好世界),一切正常。此外,解析url的代碼工作正常,無需調用孩子來完成這項工作。
爲什麼'strncpy'不可靠?它不比'strcpy'更安全嗎? – SSC 2014-11-24 13:35:08
@SSC有很多原因。大多數情況下它是不安全的,因爲如果提供的緩衝區長度和'n'值相同,那麼將不會有終止空字符'\ 0'來指示字符串結束。你可以檢查相同的[這裏](http://linux.die.net/man/3/strncpy)。 – 2014-11-24 13:36:32
我明白你的觀點。謝謝回覆。 – SSC 2014-11-24 13:40:16