#include "stdio.h" #include "stdlib.h" void fun(int n,char *a) { a=malloc(10*sizeof(char)); if(n==1) *a='bfu'; printf("%c",*a); } int main() { char *a; int n=1; fun(n,a); }为什么错误
时间: 2023-09-27 18:06:29 浏览: 63
这段代码有两个错误:
1. 在函数fun中,虽然为指针a分配了10个字符空间的内存,但是没有将字符串"bfu"复制到这个空间中。应该使用strcpy函数将字符串复制到a指向的内存空间中。
2. 在函数fun中,虽然通过指针a修改了内存中的数据,但是由于a是一个局部变量,函数结束后a指向的内存空间将被释放。这会导致在main函数中使用a时发生未定义的行为。应该将a指针作为fun函数的返回值,或者使用指向指针的指针作为函数参数,将a的地址传递给fun函数。
下面是修改后的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(int n, char **a) {
*a = malloc(10 * sizeof(char));
if(n == 1) strcpy(*a, "bfu");
printf("%s", *a);
}
int main() {
char *a;
int n = 1;
fun(n, &a);
free(a);
return 0;
}
```
在修改后的代码中,fun函数的第二个参数改为指向指针的指针,即char **a。在函数中,通过 *a 访问指针指向的内存空间,通过strcpy函数将字符串复制到这个空间中。在main函数中,将a的地址传递给fun函数,即& a,fun函数执行完毕后,可以在main函数中使用a指向的内存空间。最后,需要使用free函数释放a指向的内存空间。
相关问题
#include<stdio.h> #include<stdlib.h> void main() { int *a, *b, *c; a=b=c=(int *)malloc(sizeof(int)); *a=1; *b=2; *c=3; a=b; printf("%d%d%d \n", *a, *b, *c); }
这段代码的输出结果将是 "2 2 3"。原因是在代码的前部分,a、b、c 都被赋予了一个指向堆内存中相同位置的指针。然后,a=b 的操作导致 a 和 b 指向同一个内存位置,因此对 a 的修改也会反映在 b 上。所以,最后的 printf 语句会打印出 *a、*b 和 *c 的值,即 "2 2 3"。
#include <stdio.h> #include <string.h> #include <stdlib.h> char* reverse(char* s) { int i = strlen(s); int j = i; char* ptr = (char*)malloc(strlen(s) * sizeof(char)); memset(ptr, 0, strlen(s) * sizeof(char)); i--; for (; i >= 0; i--) { ptr[i] = *s; s++; } ptr[j] = '\0'; s = ptr; return s; } void* obfuscate(void* ptr) { int* p = (int*)ptr; *p = (*p ^ 0xdeadbeef) + 0x1337; return ptr; } int main() { char* str = (char*)malloc(200 * sizeof(char)); printf("Enter a string: "); scanf("%s", str); str = (char*)obfuscate((void*)reverse(obfuscate((void*)str)))); printf("Reversed string: %s\n", str); free(str); return 0; } 整理这个代码格式,使其美观容易阅读
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* reverse(char* s) {
int i = strlen(s);
int j = i;
char* ptr = (char*) malloc(strlen(s) * sizeof(char));
memset(ptr, 0, strlen(s) * sizeof(char));
i--;
for (; i >= 0; i--) {
ptr[i] = *s;
s++;
}
ptr[j] = '\0';
s = ptr;
return s;
}
void* obfuscate(void* ptr) {
int* p = (int*) ptr;
*p = (*p ^ 0xdeadbeef) + 0x1337;
return ptr;
}
int main() {
char* str = (char*) malloc(200 * sizeof(char));
printf("Enter a string: ");
scanf("%s", str);
str = (char*) obfuscate((void*) reverse(obfuscate((void*) str)));
printf("Reversed string: %s\n", str);
free(str);
return 0;
}
阅读全文