#include"stdio.h" void print_rev_str(char*a) { if(*a=='\0') return; else return print_rev_str(char *(a-1)); printf("%c",*a) } int main() { print_rev_str("CJLU"); }这个程序错在哪
时间: 2024-03-03 17:48:56 浏览: 19
这个程序错在递归函数 `print_rev_str` 的写法上。具体来说,它应该是这样的:
```
void print_rev_str(char* a) {
if (*a == '\0') {
return;
} else {
print_rev_str(a + 1);
printf("%c", *a);
}
}
```
原因是,在递归函数中,应该先递归调用函数,再进行输出操作。否则,程序会永远停留在递归调用的过程中,而无法进行输出操作,最终导致栈溢出。
相关问题
#include<stdio.h> void print_rev_str(char*s) { char *p=s; while(*p!='\0') p++; p--; while(p>=s) printf("%c",*p); p--; } int main() { printf("我是光电12203项琳清\n"); print_rev_str("CJLU"); return 0; }错在哪
这段代码中的函数 print_rev_str() 存在几个问题:
1. 在第二个 while 循环中,p-- 操作应该放在 printf() 函数之后,否则只会输出字符串的最后一个字符。
2. 函数 print_rev_str() 没有返回值,应该使用 void 修饰符来声明函数类型。
3. 函数 print_rev_str() 中的指针 p 可以直接在 while 循环中进行递减运算,不需要先进行递增再递减。
下面是修改后的代码:
```
#include <stdio.h>
void print_rev_str(char* s) {
char* p = s;
while (*p != '\0') {
p++;
}
p--;
while (p >= s) {
printf("%c", *p);
p--;
}
}
int main() {
printf("我是光电12203项琳清\n");
print_rev_str("CJLU");
return 0;
}
```
注意,这个程序输出的结果为“ULJC”,因为函数 print_rev_str() 是将输入的字符串进行反转输出的。
给下面的代码每一行做注释#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STR_LEN 100 #define MAX_STR_NUM 10 // 比较函数,按照ASCII码从小到大排序 int cmp(const void* a, const void* b) { const char* s1 = *(const char**)a; const char* s2 = *(const char**)b; return strcmp(s1, s2); } // 排序函数 void sort_str_list(char** str_list, int str_num) { // 排序 qsort(str_list, str_num, sizeof(char*), cmp); } int main() { char* str_list[MAX_STR_NUM] = { "hello", "world", "apple", "banana", "orange", "cherry", "dog", "cat", "bird", "fish" }; int str_num = sizeof(str_list) / sizeof(char*); // 排序 sort_str_list(str_list, str_num); // 输出排序后的结果 for (int i = 0; i < str_num; i++) { printf("%s\n", str_list[i]); } return 0; }
好的,下面是对代码的每一行的注释:
```c
#include <stdio.h> // 包含标准输入输出头文件
#include <stdlib.h> // 包含标准库头文件
#include <string.h> // 包含字符串头文件
#define MAX_STR_LEN 100 // 宏定义字符串的最大长度为100
#define MAX_STR_NUM 10 // 宏定义字符串的最大数量为10
// 比较函数,按照ASCII码从小到大排序
int cmp(const void* a, const void* b) {
const char* s1 = *(const char**)a; // 将a强制转换为char*类型,再取a的内容(即字符串的起始地址)赋给s1
const char* s2 = *(const char**)b; // 将b强制转换为char*类型,再取b的内容(即字符串的起始地址)赋给s2
return strcmp(s1, s2); // 调用strcmp函数(字符串比较函数)比较s1和s2的大小,按照ASCII码从小到大排序
}
// 排序函数
void sort_str_list(char** str_list, int str_num) {
// 排序
qsort(str_list, str_num, sizeof(char*), cmp); // 调用qsort函数(快速排序函数),将str_list数组中的字符串按照ASCII码从小到大排序
}
int main() {
char* str_list[MAX_STR_NUM] = { // 定义一个字符串数组,数组中存放10个字符串
"hello",
"world",
"apple",
"banana",
"orange",
"cherry",
"dog",
"cat",
"bird",
"fish"
};
int str_num = sizeof(str_list) / sizeof(char*); // 计算字符串数组中的字符串数量
// 排序
sort_str_list(str_list, str_num); // 调用sort_str_list函数,排序字符串数组
// 输出排序后的结果
for (int i = 0; i < str_num; i++) { // 循环输出排序后的字符串数组
printf("%s\n", str_list[i]); // 输出字符串数组中的每个字符串
}
return 0; // 返回0,表示程序正常退出
}
```