gpt4 book ai didi

C中的Char数组指针

转载 作者:行者123 更新时间:2023-11-30 17:18:39 25 4
gpt4 key购买 nike

我想运行这段代码,但我不能。我还没有开始学习 C 中的指针。我正在尝试获取字母的地址。问题是 printf("in adress: %p\n",p[i]);` 谢谢

#include <stdio.h>

int main(void){
char letter;
int c=0;
int i;
char pattern[7];
char *p;
printf("Enter a letter: ");
scanf("%c",&letter);
printf("Enter a pattern: ");
scanf("%s",pattern);
p=pattern;
for(i=0;i<7;i++)
{
if(letter==pattern[i])
{
c++;
printf("Letter < %c > is found in pattern %s\n",letter,pattern);
printf("in adress: %p\n",p[i]);
printf("index:%d\n",i);
}

}
if(c==0)
printf("The pattern does not include any letter");

return 0;
}

最佳答案

这行代码有一些很容易发生的潜在问题

scanf("%s",&pattern);

你可以像这样让它更安全

scanf("%6s",&pattern);

这是一个6因为你需要一个额外的字节'\0'在字符串的末尾,这将我们带到下一个问题

for(i=0;i<7;i++)

这里假设所有字节都是非 nul除非您正在读取 scanf() 的字符串,否则没问题。除非您创建的数组比要在其中存储的字符数大一个字节,否则 scanf()将溢出数组,即写入超出其范围的字节。

添加"%6s"格式字符串的长度说明符解决了这个问题,但您只能存储 6nul数组中的字节,以及其他问题

for (i = 0 ; pattern[i] != '\0' ; i++)

会更好,因为您不需要提前知道字符串的长度,并且不会冒险读取超出数组末尾的内容。

试试这个:

#include <stdio.h>

int main(void)
{
char letter;
char c;
int i;
char pattern[7];
printf("Enter a letter: ");
if (scanf(" %c",&letter) != 1)
{
printf("error: invalid input.\n");
return -1;
}
printf("Enter a pattern: ");
if (fgets(pattern, sizeof(pattern), stdin) == NULL)
{
printf("error: end of file.\n");
return -1;
}
for (i = 0 ; pattern[i] != 0 ; ++i)
{
if (letter == pattern[i])
{
c++;
printf("Letter < %c > is found in pattern %s\n", letter, pattern);
printf("in adress: %p\n", pattern + i);
printf("index :%d\n", i);
}

}
if (c == 0)
printf("The pattern does not include any letter");
return 0;
}

您还打印了错误的地址,因为在pointer[i]中下标运算符取消引用指针,相当于 *(poitner + i) .

关于C中的Char数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29111337/

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