我正在阅读Beej\xe2\x80\x99s 网络编程指南,在第 45 页上编写了以下代码;
\n\nstruct pollfd *pfds = malloc(sizeof *pfds * fd_size);\nRun Code Online (Sandbox Code Playgroud)\n\n我想知道是否应该
\n\nstruct pollfd *pfds = malloc(sizeof(struct pollfd) * fd_size);\nRun Code Online (Sandbox Code Playgroud)\n\n由于malloc返回一个指向指定大小的内存块的指针。
\n\n由于 *pfds 是一个指针,它的大小将为 4 或 8 字节,所以我无法理解为什么在创建数组时要考虑它的大小。
\nimport React, {useState, useEffect, Component} from 'react';
import {Grid, Paper, TextField} from '@material-ui/core'
import DataManager from './../data_manager/data_manager'
const dataManager = new DataManager();
const Tile = (props)=>{
// Initializing State Variables
const [state, setState] = useState({
data : {}
})
const { status, data, error, isFetching } = useQuery("data",async()=>{
const res = await fetch("localhost:8000");
return res.json()
}
if(status==="success"){
setState({data})
}else{
return(<p>Doing</p>)
}
}
Run Code Online (Sandbox Code Playgroud)
此代码会导致无限循环,渲染不断循环进行。
我认为这是因为setState导致useQuery再次执行再次设置状态等等。
任何帮助表示赞赏。我想将从 useQuery 获得的数据存储在状态变量中。
TIA。
#include <stdio.h>
#include <stdlib.h>
typedef struct StupidAssignment{
long length;
char* destination_ip;
char* destination_port;
long timestamp;
long uid;
char* message;
}packet;
void main(){
int number_of_packets=10;int i;
packet* all_packets[number_of_packets];
for(i=0;i<number_of_packets;i+=1)all_packets[i]=malloc(sizeof packet);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码片段不会编译,并出现以下错误:-
reciever.c: In function ‘main’:
reciever.c:16:64: error: expected expression before ‘packet’
for(i=0;i<number_of_packets;i+=1)all_packets[i]=malloc(sizeof packet);
Run Code Online (Sandbox Code Playgroud)
但是,以下代码确实可以编译:-
#include <stdio.h>
#include <stdlib.h>
typedef struct StupidAssignment{
long length;
char* destination_ip;
char* destination_port;
long timestamp;
long uid;
char* message;
}packet;
void main(){
int number_of_packets=10;int i;
packet* all_packets[number_of_packets];
for(i=0;i<number_of_packets;i+=1)all_packets[i]=malloc(sizeof(packet));
}
Run Code Online (Sandbox Code Playgroud)
唯一的区别是sizeof(packet)和sizeof packet。
在上一个答案中,我了解到这 …
我编写了以下控制器来生成 PreSigned S3 上传链接。
case class S3Controller(private val s3Config: S3Config, private val awsConfig: AwsConfig) {
val URL_TIMEOUT_IN_MILLIS: Long = 60 * 5 * 1000
def getPreSignedURLForUpload(keyName: String): String = {
val preSigner: S3Presigner = DefaultS3Presigner.builder()
.serviceConfiguration(s3Config.s3Configuration)
.credentialsProvider(awsConfig.awsCredentialsProvider).build()
val objectRequest: PutObjectRequest = PutObjectRequest.builder()
.bucket(s3Config.bucketName)
.key(keyName)
.contentType("text/plain")
.build()
val preSignRequest: PutObjectPresignRequest = PutObjectPresignRequest.builder()
.signatureDuration(Duration.ofMinutes(10))
.putObjectRequest(objectRequest)
.build()
val preSignedRequest: PresignedPutObjectRequest = preSigner.presignPutObject(preSignRequest)
val myURL: String = preSignedRequest.url().toString
myURL
}
}
Run Code Online (Sandbox Code Playgroud)
我使用的配置对象
case class S3Config (
bucketName: String,
s3Configuration: S3Configuration
)
Run Code Online (Sandbox Code Playgroud)
case class AwsConfig …Run Code Online (Sandbox Code Playgroud) def merge[X](list1: Option[List[X]], list2: Option[List[X]]): Option[List[X]]
def merge[X](list1: Option[List[X]], elem: Option[X]): Option[List[X]]
Run Code Online (Sandbox Code Playgroud)
编译器说这两个函数在擦除后具有相同的类型
def merge[X](list1: Option[List[X]],list2: Option[List[X]]): Option[List[X]] at line 122 and
def merge[X](list1: Option[List[X]],elem: Option[X]): Option[List[X]] at line 131
have same type after erasure: (list1: Option, list2: Option)Option
Run Code Online (Sandbox Code Playgroud)
为什么擦除后Option[List[X]]和Option[X]变得相同?我怎样才能让它们与众不同?
c ×2
java ×2
scala ×2
amazon-s3 ×1
generics ×1
linux ×1
networking ×1
react-query ×1
reactjs ×1
sizeof ×1