**c字符串升序函数输出不可用。Visual Studio 2022。
第14行错误1:出现异常(0x00007FF8449F63D4(ucrtbased.dll),hardwork.exe):0xC0000005:写入位置0x00007FF6738F9CA4时发生访问冲突。**
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void SortString(char** aList, int index) {
int i = 0;
int j = 0;
char ntemp[256];
for (i = 0; i < index - 1; ++i) {
for (j = i + 1; j < index; ++j) {
if (strncmp(aList[i], aList[j], sizeof(ntemp)) > 0) {
strcpy_s(ntemp, sizeof(ntemp), aList[i]);
strcpy_s(aList[i], sizeof(ntemp), aList[j]);
strcpy_s(aList[j], sizeof(ntemp), ntemp);
}
}
}
}
int main() {
char* aList[5] = {
"abc",
"def",
"ab",
"bcd",
"ae"
};
int i = 0;
SortString(aList, 5);
for (i = 0; i < 5; ++i) {
printf("%s\n", aList[i]);
}
return 0;
}
1条答案
按热度按时间yeotifhr1#
在这里,您尝试更改指针指向的字符串字面量:
这是不允许的,而且,字符串的长度是不一样的,所以如果你试图复制
bcd
到ae
,它会写越界。相反,交换 * 指针 *:
由于不允许覆盖字符串文字,因此可以将
aList
改为const char*
的数组:并相应地调整
SortString
函数。如果您尝试将strcpy_s
转换为这样的字符串文字,则会导致编译错误-这比获得运行时错误更好。Demo