簡體   English   中英

strcmp 段錯誤

[英]Seg fault with strcmp

我有一個函數可以根據我們正在閱讀的操作進行簡單的數學計算。

“操作”字符是從命令行讀取的,應該是單個字符串。

但是當我使用 strcmp 函數時,我遇到了段錯誤。

不知道為什么會這樣。 有人可以幫忙嗎? 代碼如下:

int syscall(int param1, int param2, char operation, int* result) 
{ 
if (param2 == 0 && (strcmp(operation, "/") == 0))
    {
        return -1; 
    }
    else if (strcmp(operation, "+") == 0)
    {
        *result = param1 + param2;
        return 0; 
    }
    else if (strcmp(operation, "-") == 0)
    {
        *result = param1 - param2; 
        return 0; 
    }
    else if (strcmp(operation, "*") == 0)
    {
        *result = param1 * param2; 
        return 0; 
    }
    else if (strcmp(operation, "/") == 0)
    {
        *result = param1 / param2; 
        return 0; 
    }
    else 
    {
        return -1; 
    }
}

strcmp 嘗試查找字符串和 char 的大小沒有任何空終止符,因為它不是字符串。 實際上,您甚至沒有將變量地址提供給 strcmp。 您只需將值作為地址,然后 strcmp 嘗試讀取 0 - 255 之間的某個地址。

你可以使用:

int syscall(int param1, int param2, char operation, int* result) 
{ 
    if (param2 == 0 && operation == '/')
    {
        return -1;
    }
    else if (operation == '+')
    {
        *result = param1 + param2;
        return 0; 
    }
    else if (operation == '-')
    {
        *result = param1 - param2; 
        return 0; 
    }
    else if (operation == '*')
    {
        *result = param1 * param2;
        return 0;
    }
    else if (operation == '/')
    {
        *result = param1 / param2;
        return 0;
    }
    else 
    {
        return -1; 
    }
}

char 與單個字符串不同。 strcmp 需要一個字符串。

在參數中提供字符串應該會有所幫助。

int syscall(int param1, int param2, char operation[], int* result)
  { /* rest of code */

但是,如果您只是比較字符,則只需比較字符,而不必考慮 strcmp()。

暫無
暫無

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

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