gpt4 book ai didi

c - 这个程序是否初始化了它的指针?

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:56 27 4
gpt4 key购买 nike

这是一个简单的程序,用于将 C 编程书籍(Programming in C,S. Kochan)中的字符串复制为新字符串。它运行良好,但有一个指针我没有看到初始化。我在这里与指针作斗争,但我在我的代码中嵌入了 C 黄金诫命:“不要使用未初始化的指针”。这是代码:

#include <stdio.h>

void copyString(char *to, char *from) //I do not see where the 'from' pointer is initilized?
{
for( ; *from != '\0'; ++from, ++to)
{
*to = *from;
}
*to = '\0';
}

int main(void)
{
void copyString (char *to, char *from);
char string1[] = "A string to be copied.";
char string2[50];

copyString(string2, string1);
printf("%s\n", string2);

copyString(string2, "So is this.");
printf("%s\n", string2);

return 0;
}

我的印象是所有指针都必须以这种方式初始化:

 *ptr = &variable;

否则您的系统中的某些重要内容可能会被覆盖。但是我在我的书中看到很多程序没有明确地初始化指针,这让我很不舒服。请给我一些关于谨慎使用指针的提示,这样我就不会破坏我的机器,尤其是与字符串有关的任何东西。提前谢谢大家!

最佳答案

这让您感到困惑 - void copyString (char *to, char *from); .这只是main中的声明. char *tochar *frommain没有使用所以不用担心。上面的代码一样好:

#include <stdio.h>

void copyString(char *to, char *from) //I do not see where the 'from' pointer is initilized?
{
for( ; *from != '\0'; ++from, ++to)
{
*to = *from;
}
*to = '\0';
}

int main(void)
{
void copyString (char *, char *);
char string1[] = "A string to be copied.";
char string2[50];

copyString(string2, string1);
printf("%s\n", string2);

copyString(string2, "So is this.");
printf("%s\n", string2);

return 0;
}

//I do not see where the 'from' pointer is initilized?

当你像这样传递参数时 copyString(string2, string1); - 它们将在 copyString(char *to, char *from) 的函数调用中复制到参数中.所以在第一次通话中:

copyString(string2, string1); - to = string2 , 和 from = string1

     "A string to be copied."
from--^

在第二次通话中:

to = string2 , 和 from = "So is this."

     "So is this."
from--^

string2不会导致任何问题(即使它没有被初始化)因为你覆盖它的值(之前有垃圾值)。

关于c - 这个程序是否初始化了它的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19648268/

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