C-迭代通过一个空格的结构数组*

时间:2016-09-09 06:07:02

标签: c arrays struct iteration void-pointers

我有一个功能

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]没有给出正确的值?如果我不正确地递增地址那么它就有意义但我只是在某个索引处访问该数组。在这里很丢失!

3 个答案:

答案 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