鱼C论坛

 找回密码
 立即注册
查看: 1382|回复: 3

[已解决]当传入参数伟nullptr时为什么会引发异常?

[复制链接]
发表于 2020-8-31 08:43:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是一个空格替换的问题

#include<iostream>
using namespace std;
void ReplaceBlank(char str[], int length)
{
        if (str == nullptr && length <= 0)
                return;

        /*originalLength 为字符串str的实际长度*/
        int originalLength = 0;
        int numberOfBlank = 0;
        int i = 0;
        while (str[i] != '\0')
        {
                ++originalLength;

                if (str[i] == ' ')
                        ++numberOfBlank;

                ++i;
        }

        /*newLength 为把空格替换成'%20'之后的长度*/
        int newLength = originalLength + numberOfBlank * 2;
        if (newLength > length)
                return;

        int indexOfOriginal = originalLength;
        int indexOfNew = newLength;
        while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
        {
                if (str[indexOfOriginal] == ' ')
                {
                        str[indexOfNew--] = '0';
                        str[indexOfNew--] = '2';
                        str[indexOfNew--] = '%';
                }
                else
                {
                        str[indexOfNew--] = str[indexOfOriginal];
                }

                --indexOfOriginal;
        }
}

void replaceblank(char str[], int length)
{
        cout << str << endl;
        if (str == nullptr && length <= 0)
                return;
        int originalLength = 0;
        int numOfBlank = 0;
        int i = 0;
        while (str[i] != '\0')
        {
                originalLength++;
                if (str[i] == ' ')
                        numOfBlank++;
                i++;
        }
        int newLength = originalLength + numOfBlank * 2;
        if (newLength > length)
                return;
        int indexOfOriginal = originalLength;
        int indexOfNew = newLength;
        while (indexOfOriginal >= 0&&indexOfNew>indexOfOriginal)
        {
                if (str[indexOfOriginal] == ' ')
                {
                        str[indexOfNew--] = '0';
                        str[indexOfNew--] = '2';
                        str[indexOfNew--] = '%';
                }
                else
                {
                        str[indexOfNew--] = str[indexOfOriginal];
                }
                --indexOfOriginal;
        }
        cout << str << endl;
}


void main()
{
        char str[] = "i o v";
        replaceblank(nullptr, 0);
        //ReplaceBlank(nullptr, 0);
        system("pause");
}
最佳答案
2020-8-31 09:18:42
;传入nullptr,先输出肯定异常啊
cout << str << endl;
        if (str == nullptr && length <= 0)
                return;

要把判断写在最前面
        if (str == nullptr && length <= 0)
                return;
cout << str << endl;
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-31 08:44:54 | 显示全部楼层
不懂为啥发帖的时候不允许我用代码格式提交  故在评论区再次附上代码
  1. #include<iostream>
  2. using namespace std;
  3. void ReplaceBlank(char str[], int length)
  4. {
  5.         if (str == nullptr && length <= 0)
  6.                 return;

  7.         /*originalLength 为字符串str的实际长度*/
  8.         int originalLength = 0;
  9.         int numberOfBlank = 0;
  10.         int i = 0;
  11.         while (str[i] != '\0')
  12.         {
  13.                 ++originalLength;

  14.                 if (str[i] == ' ')
  15.                         ++numberOfBlank;

  16.                 ++i;
  17.         }

  18.         /*newLength 为把空格替换成'%20'之后的长度*/
  19.         int newLength = originalLength + numberOfBlank * 2;
  20.         if (newLength > length)
  21.                 return;

  22.         int indexOfOriginal = originalLength;
  23.         int indexOfNew = newLength;
  24.         while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
  25.         {
  26.                 if (str[indexOfOriginal] == ' ')
  27.                 {
  28.                         str[indexOfNew--] = '0';
  29.                         str[indexOfNew--] = '2';
  30.                         str[indexOfNew--] = '%';
  31.                 }
  32.                 else
  33.                 {
  34.                         str[indexOfNew--] = str[indexOfOriginal];
  35.                 }

  36.                 --indexOfOriginal;
  37.         }
  38. }

  39. void replaceblank(char str[], int length)
  40. {
  41.         cout << str << endl;
  42.         if (str == nullptr && length <= 0)
  43.                 return;
  44.         int originalLength = 0;
  45.         int numOfBlank = 0;
  46.         int i = 0;
  47.         while (str[i] != '\0')
  48.         {
  49.                 originalLength++;
  50.                 if (str[i] == ' ')
  51.                         numOfBlank++;
  52.                 i++;
  53.         }
  54.         int newLength = originalLength + numOfBlank * 2;
  55.         if (newLength > length)
  56.                 return;
  57.         int indexOfOriginal = originalLength;
  58.         int indexOfNew = newLength;
  59.         while (indexOfOriginal >= 0&&indexOfNew>indexOfOriginal)
  60.         {
  61.                 if (str[indexOfOriginal] == ' ')
  62.                 {
  63.                         str[indexOfNew--] = '0';
  64.                         str[indexOfNew--] = '2';
  65.                         str[indexOfNew--] = '%';
  66.                 }
  67.                 else
  68.                 {
  69.                         str[indexOfNew--] = str[indexOfOriginal];
  70.                 }
  71.                 --indexOfOriginal;
  72.         }
  73.         cout << str << endl;
  74. }


  75. void main()
  76. {
  77.         char str[] = "i o v";
  78.         replaceblank(nullptr, 0);
  79.         //ReplaceBlank(nullptr, 0);
  80.         system("pause");
  81. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-31 09:18:42 | 显示全部楼层    本楼为最佳答案   
;传入nullptr,先输出肯定异常啊
cout << str << endl;
        if (str == nullptr && length <= 0)
                return;

要把判断写在最前面
        if (str == nullptr && length <= 0)
                return;
cout << str << endl;
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-8-31 09:32:20 | 显示全部楼层
xieglt 发表于 2020-8-31 09:18
;传入nullptr,先输出肯定异常啊
cout

阿阿阿我知道了谢谢 我都没注意到 我多加了一个输出str
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 01:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表