gpt4 book ai didi

c - 多次运行函数时的不同结果 - C

转载 作者:太空狗 更新时间:2023-10-29 15:54:08 24 4
gpt4 key购买 nike

我已经编写了一个函数,当我运行它时它运行良好,但是当我使用不同的输入多次运行它时出现问题。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#define MAX_SIZE 20

int SumStr(char *str) {
int i = 0, j = 0, num = 0, tempnum = 0;
char temp[MAX_SIZE];
while (*(str + i) != 0) { //While not NULL - Checked
while (((*(str + i)) >= 48) && ((*(str + i)) <= 57)) { //while str[i] is [0-9]
*(temp + j) = *(str + i);
++j; ++i;
}
if (j != 0) {
tempnum = atoi(temp);
num = tempnum + num;
tempnum = 0;
j = 0;
}
++i;
}
return num;
}

void Test3(char *arr, int sum)
{

int tempSum = SumStr(arr);
if (tempSum != sum)
{
printf("Your Output is %d, Expected: %d (-3)\n", tempSum, sum);
}
}

void main() {

Test3("ax3b5mt11f", 19);
Test3("5$5$5", 15);
Test3("1234", 1234);
Test3("1$0!100", 101);
Test3("1$1!1", 3);
}

该函数的目的是对字符串中的所有数字求和。

当我用这个 main 运行一次函数时(例如),它工作得很好;

void main() {
Test3("1$0!100", 101);
}

Output: num=101

但是当 main 使用不同的输入多次运行函数时,输出是完全错误的。


这个main的输出;

void main() {
Test3("ax3b5mt11f", 19);
Test3("5$5$5", 15);
Test3("1234", 1234);
Test3("1$0!100", 101);
Test3("1$1!1", 3);
}

是;

Your Output is 6871, Expected: 15
Your Output is 6718, Expected: 1234
Your Output is 5024, Expected: 101

最佳答案

一个问题是在将 temp 字符串传递给 atoi 之前,您没有使用 '\0' 字符终止它。你可以这样写:

temp[j] = '\0';  // or: *(temp + j) = '\0';
if (j != 0) { ...

请注意,将未以 '\0' 正确终止的字符序列传递给需要(终止的)字符串的函数会产生未定义的行为;那可能就是你当时观察到的。

其次,如果输入字符串的最后一个字符是数字,则将 i 递增两次,从而错过输入的字符串终止字符。这再次导致未定义的行为。为了克服这个问题,您可以在递增 i 之前检查您是否在字符串的末尾:

    if (*(str + i) != 0) {
++i;
}

关于c - 多次运行函数时的不同结果 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47849855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com