Это простая программа для резки url (формы www.blabla.com/blabla/..
) в часть хоста и часть пути. Я новичок в процессе выполнения задания, но ребенок не печатает enything на экране. Вот код.Детский процесс ничего не печатает
#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
@SSC есть много причин. в основном это небезопасно, потому что, если длина предоставленного буфера и значение «n» одинаковы, то для обозначения конца строки не будет завершающий нуль '\ 0'. вы можете проверить то же [здесь] (http://linux.die.net/man/3/strncpy). –
Я вижу вашу точку зрения. Спасибо за ответ. – SSC