作为C的新手,我从void指针中获得的唯一实际用法是用于在给定指针中存储不同数据类型的通用函数.因此,在进行内存分配时,我没有输入指针.
我见过一些有时使用void指针的代码示例,但是它们是类型转换的.为什么这有用?为什么不直接创建所需类型的指针而不是void?
我想我有两个问题:
我试图在不使用网络浏览器的情况下向网络服务器发送 HTTP 请求。我已经阅读了使用 Telnet 执行此操作的最常用方法,但我想知道其他方法。
另外,我认为我的 telnet 有问题。我激活了 telnet 客户端,然后在命令窗口中输入 telnet,然后输入“打开 IP 地址 80”,它会永远显示“连接到 IP 地址......”,但永远不会让我过去。大家有遇到过这个问题吗?另外,我在 Wireshark 上注意到 TCP 握手正确发生。
谢谢,麻烦您了!
我有一个返回void指针的函数.让我们说我知道指向的数据块是一个int数组.我该如何打印?
从另一个线程我看到我以这种方式将void转换为我想要的数据类型:
printf("%i",*((int*)data));
Run Code Online (Sandbox Code Playgroud)
但就像我说的那样,数据是一组整数.我试图这样做,但它不是一个有效的表达式:
for(i = 0; i<3; i++){
printf("%i \n", *((int*)(data+sizeof(int)*i)));
}
Run Code Online (Sandbox Code Playgroud)
什么是正确的打印方式?
我对线程和叉子比较陌生。所以为了更好地理解它们,我一直在编写简单的程序。我写了两个程序的小程序之一,一个在两个进程上打印一个计数器,另一个有两个线程。我注意到的是,叉子以交错方式打印计数器,而线程则打印一个线程的计数器,然后是其他线程的计数器。所以线程不是那么并行,而是表现得更串行,这是为什么?难道我做错了什么?
另外, pthread_join 到底是做什么的?即使我不做 pthread_join 程序也会以类似的方式运行。
这是我的线程代码
void * thread1(void *a){
int i =0;
for(i=0; i<100; i++)
printf("Thread 1 %d\n",i);
}
void * thread2(void *b){
int i =0;
for(i=0; i<100; i++)
printf("Thread 2 %d\n", i);
}
int main()
{
pthread_t tid1,tid2;
pthread_create(&tid1,NULL,thread1, NULL);
pthread_create(&tid2,NULL,thread2, NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我的 fork 代码
int main(void)
{
pid_t childPID;
childPID = fork();
if(childPID >= 0) // fork was successful
{
if(childPID == 0) // child process
{ int i;
for(i=0; i<100;i++) …Run Code Online (Sandbox Code Playgroud)