我有一个功能
struct Analysis reduce (int n, void* results)
其中n是要分析的文件数,并且我将Analysis结构数组传递给结果。
Analysis结构定义如下:
struct Analysis {
int ascii[128]; //frequency of ascii characters in the file
int lineLength; //longest line in the file
int lineNum; //line number of longest line
char* filename;
}
我已经投了空虚*,
struct Analysis resArray[n];
struct Analysis* ptr = results;
resArray[0] = ptr[0];
但我无法弄清楚如何正确迭代resArray。我试过了
for (i = 0; i < n; i++){
printf("lineLength: %d\n", resArray[i].lineLength);
}
n = 3,我得到了垃圾值。 resArray [0]是正确的,但是resArray [1]是一个疯狂的高数字,resArray [2]只是0.为什么resArray [1]或resArray [2]没有给出正确的值?如果我不正确地递增地址那么它就有意义但我只是在某个索引处访问该数组。在这里很丢失!
答案 0 :(得分:0)
resArray [0]是正确的,因为有“某事”:
resArray[0] = ptr[0];
其他元素是垃圾,因为您没有设置任何值。如果要复制整个数组,则需要将复制方法更改为:
for (i = 0; i < n; i++)
{
resArray[i] = ptr[i];
}
答案 1 :(得分:0)
您无法直接为数组指定指针,因为它们是不同的类型since array[n] is type struct analysis(*)[n] and ptr is type struct analysis(*)
。查看here了解详情。
答案 2 :(得分:-1)
希望这段代码可以帮到你。
class AmazonS3:
def __init__(self, bucket_name):
aws_config = AWSConfig()
session = aws_config.get_session()
self.s3 = session.resource("s3")
self.bucket_name = bucket_name
def upload(self, key, file_name):
if os.path.isfile(file_name):
with open(file_name, 'rb') as upload_file:
try:
logger.info("Uploading to S3 " + self.bucket_name + " " + key)
response = self.s3.Object(self.bucket_name, key).put(Body=upload_file)
logger.info(response)
if response['ResponseMetadata']['HTTPStatusCode'] != 200:
return False
except:
logger.error(traceback.format_exc())
return False
return True
return False
您可以尝试online。