[英]Why am I getting a segmentation fault in this program?
我正在嘗試將此程序中的M和N的值設置為從此C程序在其命令行上接收的字符串解析的任何值。 但是,每當我運行代碼時,我都會遇到分段錯誤。 我是C語言中的指針概念的新手,所以我知道它的存在。
該代碼應按以下方式工作:
./a.out -1,12
印刷品:
1、12
謝謝你的幫助!
#include <stdio.h>
#include <stdlib.h>
void getnumber(char *toTest, int *a, int *c);
int main ( int argc, char *argv[] )
{
int a, c, curr;
a = 1;
c = 1;
curr = 1;
if ( argv[1][0] == '-' )
{
curr = 2;
getMandNValues(argv[1], &a, &c);
}
printf("%d, %d\n", a, c);
return 0;
}
void getMandNValues(char *src, int *a, int *c)
{
char aString[sizeof src];
char bString[sizeof src];
int i = 0;
while((aString[i] = &src[i+1]) != ',')
++i;
aString[i] = '\0';
int j = 0;
while((bString[j] = &src[i + 2]) != '\0')
{
++j;
++i;
}
bString[j] = '\0';
*a = atoi(aString);
*c = atoi(bString);
}
編譯器輸出為:
/tmp/foo.c: In function ‘main’:
/tmp/foo.c:18: warning: passing argument 2 of ‘getMandNValues’ makes pointer from integer without a cast
/tmp/foo.c:18: warning: passing argument 3 of ‘getMandNValues’ makes pointer from integer without a cast
/tmp/foo.c: In function ‘getMandNValues’:
/tmp/foo.c:34: warning: assignment makes integer from pointer without a cast
/tmp/foo.c:41: warning: assignment makes integer from pointer without a cast
並沒有查看所有內容,但您需要此調用的var地址。
getMandNValues(argv[1], &a, &c);
我不知道您使用的是什么編譯器,但我不會忽略它在編譯時必須顯示的警告。 (如果未使用最高級別的警告,則應使用。)
看更多還有另一個問題
while((aString[i] = &src[i+1]) != ',')
++i;
似乎很奇怪(和錯誤)。 我會這樣做:
int index=0;
do
{
aString[index] = src[index+1];
index++;
} while (str[index] != ',')
這是另一個問題
char aString[len(src)];
char bString[len(src)];
getMandNValues(argv[1], a, c);
應該
getMandNValues(argv[1], &a, &c);
您應該將&a和&c傳遞給該函數。
您正在混合getnumber
和getMandNvalues
。
您已經為getnumber
提供了一個原型,但是沒有該函數的定義。 在調用此函數之前,您提供了getMandNvalues
的定義,但沒有提供原型。
調用范圍內沒有原型的函數是合法的。 編譯器假定它返回int
並且所有參數都是int
。 在這種情況下,這些都不是正確的。
更正您的原型
您將int a和int c傳遞給需要int * a和int * c的函數
而不是使用
getMandNValues(argv[1], a, c);
,嘗試
getMandNValues(argv[1], &a, &c);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.