sort(pstr); printf("output:"); for (i=0; i<3; i++) { printf("%s\n", *pstr[i] ); } return 0; }
时间: 2024-05-06 13:16:41 浏览: 22
这段代码有问题,*pstr[i] 应该改为 pstr[i],因为 pstr[i] 已经是指向字符串的指针了,不需要再进行解引用。正确的代码应该是:
```c
sort(pstr);
printf("output:");
for (i = 0; i < 3; i++) {
printf("%s\n", pstr[i]);
}
return 0;
}
```
相关问题
请用指针数组编程实现按奥运会参赛国的国名在字典中的顺序对其入场次序进行排序。 假设参赛国不超过150个,参赛国的国名不超过9个字符。 下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。 #include <stdio.h> #define MAX_LEN 10 #define N 150 void SortString(char *ptr[], int n); main() { int i, n; char *pStr[N]; printf("How many countries?\n"); scanf("%d",&n); printf("Input their names:\n"); for (i=0; i<n; i++) { gets(pStr[i]); } SortString(pStr[i], n); printf("Sorted results:\n"); for (i=0; i<n; i++) { puts(pStr[i]); } } void SortString(char *ptr[], int n) { int i, j; char temp; for (i=0; i<n-1; i++) { for (j = i+1; j<n; j++) { if (ptr[j] < ptr[i]); { temp = ptr[i]; ptr[j] = ptr[i]; ptr[j] = temp; } } } }
以下是改正后的程序:
```
#include <stdio.h>
#include <string.h>
#define MAX_LEN 10
#define N 150
void SortString(char *ptr[], int n);
int main() {
int i, n;
char str[N][MAX_LEN];
char *pStr[N];
printf("How many countries?\n");
scanf("%d", &n);
getchar(); // 读取行末的回车符
printf("Input their names:\n");
for (i = 0; i < n; i++) {
fgets(str[i], MAX_LEN, stdin);
str[i][strlen(str[i]) - 1] = '\0'; // 去掉字符串末尾的换行符
pStr[i] = str[i];
}
SortString(pStr, n);
printf("Sorted results:\n");
for (i = 0; i < n; i++) {
puts(pStr[i]);
}
return 0;
}
void SortString(char *ptr[], int n) {
int i, j;
char *temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (strcmp(ptr[j], ptr[i]) < 0) {
temp = ptr[i];
ptr[i] = ptr[j];
ptr[j] = temp;
}
}
}
}
```
改正说明:
1. 在 `main` 函数中,应该定义一个字符数组 `str` 来存储输入的字符串,然后将它们的地址存储到指针数组 `pStr` 中。
2. 在读取输入的字符串时,应该使用 `fgets` 函数,并将字符串末尾的换行符替换为 '\0'。
3. 在调用 `SortString` 函数时,应该传入指针数组 `pStr`,而不是 `pStr[i]`。
4. 在 `SortString` 函数中,应该将 `temp` 定义为指向字符指针的指针,而不是字符指针。
5. 在比较两个字符串的大小时,应该使用 `strcmp` 函数。同时,应该将 `if` 语句中的分号去掉,否则语句块不会执行。
下面代码 如何做到加密解密得:void CManager::EncryptString(WCHAR* pStr) { int len = wcslen(pStr); for(int i = 0; i < len; i++) { pStr[i] ^= 0xFFFF; } TRACE("%-s %d\r\n", pStr, wcslen(pStr)); }
这段代码使用了异或运算符(^)和十六进制数0xFFFF来进行加密操作。具体来说,它将输入的字符串中的每个字符与0xFFFF进行异或操作,从而将每个字符的二进制值进行反转。这样做的目的是为了保护字符串的机密性,使其难以被未经授权的人读取。
要对加密后的字符串进行解密,只需再次对其进行异或操作,使用相同的十六进制数0xFFFF。这样会使加密过程中进行的反转被再次撤销,从而恢复原始字符串。
需要注意的是,这种简单的加密方式并不是十分安全,因为它可以被比较容易地破解。如果需要更高级的安全性保护,可以考虑使用更复杂的加密算法。