gpt4 book ai didi

C相同的代码,VScode编译,VisualStudio没有

转载 作者:行者123 更新时间:2023-11-30 19:00:18 27 4
gpt4 key购买 nike

我已成功安装并配置 Visual Studio 和 vscode。使用 vscode 编译并运行,而 Visual Studio 出现此错误: “使用的局部变量‘num’未初始化”为什么??

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

void *my_malloc( size_t n ) {
void *p;
p = malloc( n );
if ( p == NULL ) {
printf( ".....\n" );
exit( EXIT_FAILURE );
}

return p;
}


char *read_n( int *num ) {
char *a;
int i;
printf("Quanti elementi: ");
scanf( "%d", num );

a = my_malloc( *num * sizeof(char) );
for ( i = 0; i < *num; i++ ) {
scanf( " %c", a + i );
}

return a;
}


int main() {
int *num;

char *array = read_n(num);

for (int i=0; i < *num; i++) {
printf("\n%c", array[i]);
}


}

最佳答案

除了在 Visual Studio 中启用警告(建议使用 /W3)并在 main() 中声明 int num; 以及将指针传递给 read_n 作为,例如

char *array = read_n (&num);

还有一些地方需要改进。当malloc失败时,errno被设置,允许您使用perror报告错误,例如

void *my_malloc (size_t n)
{
void *p = malloc (n);
if (p == NULL) {
perror ("my_malloc");
exit (EXIT_FAILURE);
}

return p;
}

无论您用 C 编写什么代码,如果您无法检查返回,就无法正确使用任何输入函数。例如,在 read_n() 中,在这两种情况下都无法检查 scanf 的返回。您至少必须检查预期的转化次数是否实际发生。您可以独立检查返回是否为 EOF0(如果超过则表示匹配失败输入失败预期一次转换)。您可以执行类似以下操作:

    fputs ("Quanti elementi: ", stdout);
if (scanf ("%d", num) != 1) {
fputs ("error: invalid integer input.\n", stderr);
exit (EXIT_FAILURE);
}

    for (i = 0; i < *num; i++)
if (scanf (" %c", a + i) != 1) {
fputs ("(user canceled input)\n", stderr);
break;
}

进一步,在 read_n 中,sizeof (char) 被定义为 1,无需将其作为分配大小的乘数,例如

    a = my_malloc (*num);

除此之外,尝试从 main() 传递 num 的未初始化指针的主要问题可以按如下方式纠正:

int main (void) {

int num;

char *array = read_n (&num);

putchar ('\n');
for (int i=0; i < num; i++) {
putchar (array[i]);
putchar ('\n');
}

free (array); /* don't forget to free what you allocate */
}

最后,如上所示,不要忘记释放您分配的内容。对于 main() 中使用的分配并不重要,因为内存将在程序退出时释放。但是,当您的动态分配被创建并使用程序深处的多个函数时,这些函数并不是简单地运行和退出,在指针超出范围之前未能释放您分配的内容将导致< em>内存泄漏。尽早养成良好的习惯。跟踪您的分配并释放您分配的内容。

仔细检查一下,如果您还有其他问题,请告诉我。

关于C相同的代码,VScode编译,VisualStudio没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60198375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com