[英]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.