0
我遇到了問題。在我的程序中,我想分割字符串,將每個子字符串保存在變量中,然後將它們轉換爲int,以便我可以進行一些計算。劃分字符串並轉換爲Int
char line[] = "500,600";
char line[] = "-500,-600";
char line[] = "500,-600";
但是當我嘗試
char line[] = "-500,600";
我得到了奇怪的輸出:
#include <stdio.h>
#include<string.h>
int main()
{
char *token;
char *token2;
char line[] = "-500,600";
char *search = ",";
printf("%s\n",line);
token = strtok(line, search);
printf("token1: %s\n",token);
token2 = strtok(NULL, search);
printf("token2: %s\n",token2);
int n = toInt(token);
int m = toInt(token2);
printf("String = %s\nInteger = %d\n", token, n);
printf("String = %s\nInteger = %d\n", token2, m);
int b = n*3;
int c = m*2;
printf("%d\n",b);
printf("%d",c);
return 0;
}
int toInt(char a[]) {
int c, sign, offset, n;
if (a[0] == '-') { // Handle negative integers
sign = -1;
}
if (sign == -1) { // Set starting position to convert
offset = 1;
}
else {
offset = 0;
}
n = 0;
for (c = offset; a[c] != '\0'; c++) {
n = n * 10 + a[c] - '0';
}
if (sign == -1) {
n = -n;
}
return n;
}
當輸入值,例如它工作正常toInt函數可能有問題,但我不能說出了什麼問題。也許你有人有一個想法。
我知道我可以使用atoi函數更簡單,但我感興趣的是這裏有什麼問題。
當您使用調試器完成代碼時,您看到了什麼? – pm100
'sign'需要初始化爲'int sign = 0;'在使用它之前還要將原型'int toInt(char a []);'放入。 – BLUEPIXY
正確的,如果'a [0]!='-'',那麼下一次檢查'sign'會從一個未初始化的變量中讀取,這是未定義的行爲 – KABoissonneault