簡體   English   中英

C 語言,字符數組已損壞(?)

[英]C language, char array is corrupted(?)

我沒有對“org”字符數組做任何事情,但是當我看到 output 時。 'org' 數組從香蕉更改為香蕉。 我猜這是由 memory 損壞或其他原因引起的,但我不知道到底出了什么問題。 如何修復 org char 數組的內容?

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

char org[];
int N;
char clue[1010][110];
int arrest[1010];

void solve(){ // Core function
    char* copy;
    int len_org, len_clue, tmp=0, cnt=0;
    int i, j;

    len_org = strlen(org);
    //printf("len_org = %d\n", len_org);

    for(i=0; i<N; i++){
        //copy = org;
        //memset(copy, 0, strlen(len_org));
        //printf("org = %s\n", org);
        copy = org;
        cnt = 0;
        printf("first copy = %s, org = %s\n", copy, org);
        len_clue = strlen(clue[i]);
        printf("len_clue = %d\n", len_clue);
        tmp = len_org - len_clue;
        for(j=0; j<=tmp; j++){
            printf("clue[i] = %s, copy = %s\n", clue[i], copy);
            if(!strncmp(copy, clue[i], len_clue)){
                cnt++;
                printf("cnt = %d\n", cnt);
            }
            copy++;
            printf("copy = %s, org = %s\n", copy, org);
        }
        printf("final cnt = %d\n\n", cnt);
        arrest[i] = cnt;
    }

    /*for(i=0; i<N; i++)
        printf("%s\n", clue[i]);*/
}

void inputData(){
    int i;
    scanf("%s", org);
    scanf("%d", &N);
    for(i=0; i<N; i++){
        scanf("%s", clue[i]);
    }
}

int main() {
    inputData();
    solve();
    return 0;
}

使用 gcc (7.3) 編譯代碼確定問題:

cc a.c
a.c:4:6: warning: array ‘org1’ assumed to have one element
 char org1[];
      ^~~~

在實踐中(gcc 7.3)“org”位於“clue”和“arrset”(全局)變量之間。 從 'nm a.out' 可以看出 - 逮捕開始 org 后 4 個字節,使得 'org' 的有效大小為 4。

Output 來自:nm a.out | 種類

0000000000201040 B N
0000000000201060 B clue
000000000021c25c B org
000000000021c260 B arrest
000000000021d228 B _end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM