C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用

本文是想用来记载作为菜菜的初学者的自己解决这个问题的过程><
如果是想康康最终的代码,直接通过目录到达“风暴叒一次来临(正确的道路)就可以啦”~
如果在代码输入之后出现了“未加载 wntdll.pdb”,这个解决方法是在“风暴叕一次来临(正确的道路)”
ps,最终结果也只是能运行出来,但是会提示“twoSortString.exe 已触发了一个断点”

目录

发现错误

软件:Visual Studio 2017

题目

C++程序设计(第3版)谭浩强,第六章习题第2题:输入3个字符串,按由小到大的顺序输出(要求用指针或引用方法处理)

报错的代码

参考C++程序设计题解与上机指导(第3版)谭浩强著
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》

第一次挣扎(不改变strcpy)

避免编辑器强制要求(行不通)

开头添加#define _CRT_SECURE_NO_WARNING
参考C++中strcpy() 函数报错

新的风暴(决定放弃strcpy)

《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》

第二次挣扎(使用strcpy_s)

风暴又一次来临(提示越界)

《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
参考浅谈 Run-Time Check Failure #2 – Stack around the variable ‘xxx’ was corrupted 的解决方法后意识到是在程序中的某个变量附近的内存被破坏了,这表示程序存在内存越界,通过排查也认识到是p出了问题,作为菜菜的初学者,我自认为机智地修改了p数组的大小
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
真好,无论是将20改为100,23还是50都是错的,表面笑嘻嘻,心里哭唧唧。不过,失败是成功之母嘛,决定找strcpy_s示例看看的我又打开了搜索网站

风暴叒一次来临(正确的道路)

感谢strcpy_s函数,我找到了一种新的分配存储空间的方式

#include <iostream>
#include <cstring>
using namespace std;

void swap(char *p1, char *p2) { 
	char *p = new char[21];
	strcpy_s(p, strlen(p) + 1, p1);
	strcpy_s(p1,strlen(p1)+1,p2);
	strcpy_s(p2, strlen(p2) + 1, p);
}

int main() { 
	char str1[20],str2[20],str3[20];
	cout << "请输入三个字符串:" << endl;
	gets_s(str1);
	gets_s(str2);
	gets_s(str3);
	if (strcmp(str1, str2) > 0) { 
		swap(str1, str2);
	}
	if (strcmp(str1, str3) > 0) { 
		swap(str1, str3);
	}
	if (strcmp(str2, str3) > 0) { 
		swap(str2, str3);
	}
	cout<< "交换后的顺序为:" << endl;
	cout << str1 << endl << str2 << endl << str3 << endl;
	return 0;
}

这下总不能再有问题了趴><

风暴叕一次来临(收尾工作)

我是万万没想到C++会偷袭我这个18岁的小姑凉
特喵地叕有新的问题(文章写于问题解决之后,实在不想重新安装一次VS2017截报错图了,问题描述如下)
在编译的过程中出现了一个对话框提示程序已经出现一个断点,然后跳转界面提示未加载 wntdll.pdb
参考vs编译出现未加载 wntdll.pdb

step1:点击调试中的选项
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
step2:右侧找到符号再在Microsoft符号服务器前点击打勾
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
等比较长的一段时间(我等了近二十分钟)之后就可以啦~

虽然还是会触发断点
《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》
但是能够运行出结果

《C++输入3个字符串,按由小到大的顺序输出(用指针方法处理),VS2017strcpy使用与strcpy_s使用》

    原文作者:怂怂的小白菜
    原文地址: https://blog.csdn.net/qq_42490010/article/details/110938355
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞