- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
正如标题所暗示的那样,我从 strtoul 得到了一些奇怪的返回,我已经通过使用 strcpy 将数据存储为字符串进行了测试,它给出了正确的值,但是一旦我尝试将其更改为无符号的int 通过使用 strtoul() 我得到了一个奇怪的结果,并且找不到修复它的方法。我的代码如下:
void loadData(TennisStoreType* ts, char* customerFile, char* stockFile) {
FILE *customerdata;
FILE *stockdata;
const char *DEL = ",\n\t\r";
CustomerNodeType newdata;
int datapos = 0;
char buffer[BUFFER_SIZE];
char *remainder;
char *token;
char *cantload = "Can not load data from ";
char *errorload = "Invalid data entry in ";
char *canload = "Loading data from ";
customerdata = fopen(customerFile, "r");
stockdata = fopen(stockFile, "r");
/* checks if the file can open*/
if (customerdata == NULL) {
fprintf(stderr, "%s%s\n", cantload, customerFile);
} else {
printf("%s%s\n", canload, customerFile);
while(fgets(buffer, BUFFER_SIZE, customerdata) != NULL) {
token = strtok(buffer, DEL);
while(token != NULL) {
/* this function checks weather the information is valid for
the data position entered*/
if (validCustData(datapos, token)) {
/* Where abouts in the structure to load the data to*/
switch (datapos) {
case 0:
strcpy(newdata.custID, token);
printf("successfully added %s in custID\n", newdata.custID);
break;
case 1:
/*my own check to allow surnames to be entered over 12 characters
as in reality they do exist but it will only accept the first
12 characters and enter them into the structure
if (strlen(token) <= SURNAME_MAX) {
strcpy(newdata.surname, token);
} else {
strncpy(newdata.surname, token, SURNAME_MAX);
newdata.surname[SURNAME_MAX] = '\0';
}
printf("successfully added %s in surname\n", newdata.surname);
break; */
strcpy(newdata.surname, token);
printf("successfully added %s in surname\n", newdata.surname);
break;
case 2:
strcpy(newdata.firstName, token);
printf("successfully added %s in first name\n", newdata.firstName);
break;
case 3:
strcpy(newdata.address, token);
printf("successfully added %s in address\n", newdata.address);
break;
case 4:
strcpy(newdata.suburb, token);
printf("successfully added %s in suburb\n", newdata.suburb);
break;
case 5:
newdata.postCode = strtoul(token, &remainder, POSTCODE_LEN);
printf("successfully added %lu in postcode\n", newdata.postCode);
remainder = NULL;
break;
case 6:
newdata.phoneNum = strtoul(token, &remainder, PHONENUM_LEN);
printf("successfully added %lu in phone number\n", newdata.phoneNum);
remainder = NULL;
break;
}
} else {
fprintf(stderr,"%s%s '%s'\n", errorload, customerFile, token);
exit(EXIT_FAILURE);
return;
}
if (datapos == DATA_POSITIONS) {
datapos = 0;
} else {
datapos = datapos + 1;
}
token = strtok(NULL, DEL);
}
}
}
if (stockdata == NULL) {
fprintf(stderr, "%s%s\n", cantload, stockFile);
} else {
/* to do */
printf("%s%s\n", canload, stockFile);
}
}
正在加载的数据是 datapos = 5: 和 token = 3333: 打印的结果是...“成功地在邮政编码中添加了 255”。
如上所述,在不更改输入和更改案例 5 的情况下:使用 strcpy() 而不是 strtoul() 是可行的,但我不能这样做,因为它不遵循标志 -pedantic -ansi 和 -Wall。它需要 100%。
ps:如果需要,POSTCODE_LEN 定义为 4,我已经包含了 stdlib.h 和 string.h
最佳答案
strtoul 的第三个参数不是字符串长度(我们总是使用整个字符串)——而是数字基数(也称为基数)。尝试传入 10 而不是 4。
关于c - token to unsigned printing odd 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28537022/
我不知道下面的代码有什么问题,它应该读取数字并将它们的值与位置放在一个成对的 vector 中,然后对它们进行排序并打印出位置。我用 sort 删除了部分 - 我认为问题就在那里,但我再次收到编译错误
我相信当您将两个 unsigned int 值相加时,返回值的数据类型将是 unsigned int。 但是两个 unsigned int 值相加可能会返回一个大于 unsigned int 的值。
我从左移得到的结果我找不到解释。 unsigned char value = 0xff; // 1111 1111 unsigned char = 0x01; // 0000 0001 std::c
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
根据:http://en.wikipedia.org/wiki/C_data_types您可以使用 unsigned short 类型或 unsigned short int 类型。但是它们之间有什么
我正在尝试在 arduino 草图中实现 CRC16。从网上拿到了crc.c文件,想试试看。我创建了其他文件以允许 crc.c 正确运行。这是我的文件。 crc.h: #ifndef CRC_C_ #
我正在尝试实现一个将存储相关索引的列表。但是,我在标题中提到的 for (index_itr = (list_size - numberOfEvents - 1) 处遇到错误。我在做什么错误,以及如何
这不是跨平台代码...所有内容都在同一平台上执行(即字节序是相同的......小字节序)。 我有这个代码: unsigned char array[4] = {'t', 'e', 's', '
我有一个 8 位 unsigned char vector 和一个 16 位 unsigned short vector std::vector eight_bit_array; std::vecto
这个问题在这里已经有了答案: Is subtracting larger unsigned value from smaller in C++ undefined behaviour? (2 个答案
这个问题已经有答案了: Difference between unsigned and unsigned int in C (5 个回答) 已关闭 6 年前。 在 C 语言中,unsigned 之间有
我遇到了一个我不太理解的警告。该警告是通过比较我认为是一个未签名的内容与另一个未签名的内容而生成的。 来源如下: #include #include #include #include int
好吧,这一定很愚蠢。我在移动一些代码时遇到了这个问题,并认为我打错了字或未能正确使用调试器。作为健全性检查,我创建了这个测试用例,但它似乎仍然失败。 unsigned int vtxIdx
我有一个同事不热衷于使用现代 C++ 例如,当我要求他开始使用 r_value 引用时,他不会这样做。当我要求他使用 std::array 而不是 c 数组(char example[8])时,他不会
我有一个无符号字符数组,例如Data[2]。我需要它来与返回 unsigned int 的函数的输出进行比较。 我尝试将 Data[2] 转换为 unsigned int,反之亦然。它没有用。 我想做
我遇到了一个我不太明白的警告。警告是通过将我认为是未签名的与另一个未签名的进行比较而生成的。 这是来源: #include #include #include #include int mai
在下面的程序中,我使用了 unsigned 关键字。 #include int main() { unsigned char i = 'A'; unsigned j
整数值转换为浮点值并再次返回时是否与原始整数值相同? 例如: unsigned x = 42; double y = x; unsigned z = y; 假设编译器没有优化浮点转换,x == z 是
这个问题在这里已经有了答案: Difference between unsigned and unsigned int in C (5 个答案) 关闭 9 年前。 我理解 unsigned 和 un
您好,我遇到了一个关于位运算的小概念问题。请参阅下面的代码,其中我有一个 4 字节的无符号整数。然后我通过将地址分配给无符号字符来访问各个字节。 然后我将最后一个字节的值设置为 1。并对 unsign
我是一名优秀的程序员,十分优秀!