strcopy崩溃c程序

时间:2015-06-24 00:34:09

标签: c string crash strcpy

我的程序从命令行参数到名称获取名称和年龄,并将每个名称和年龄存储为结构的元素。当我运行它时,我的问题是strcpy崩溃我的程序。这是我的代码,我将不胜感激任何帮助。

 #include<stdio.h>
 #include<stdlib.h>
 #include<string.h>

 typedef struct {
     char name[80];
     int age;
 } person;

int main(int argc, char *argv[]){

if (argc == 1 || argc % 2 == 0) {
    printf("Invalid arguments.\n Usage: %s name1 age1 name2 age2 ...", argv[0]);
    return 0;
}

person people[argc/2];
int i;

for (i = 0; i < argc; i++)
    strcpy(people[i].name, argv[i+1]);

1 个答案:

答案 0 :(得分:4)

问题在于此循环:

for (i = 0; i<argc/2; i++)
  strcpy(people[i].name, argv[i*2+1]);

您有两个超出范围的数组引用:

  1. 您正在从0..argc-1循环,因此您从1..argc引用argv - 即。超出范围。

  2. 此外,您正在创建一个长度为argc / 2的数组,但您正在引用元素0 ... argc - 即。另一个阵列溢出。

  3. 循环应该是这样的:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:background="@color/Dark_Grey"
              tools:context=".NavigationDrawerFragment">
    
    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="150dp"
        android:id="@+id/imageView"
        android:src="@drawable/bitsnbytes_logo_phrase"
        android:padding="10dp"/>
    
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="@color/DARK_GREEN"
        />
    </LinearLayout>