Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 我能';我找不到为什么我的C代码没有编译而另一个正在运行这两种代码几乎是一样的_Arrays_String_Pointers - Fatal编程技术网

Arrays 我能';我找不到为什么我的C代码没有编译而另一个正在运行这两种代码几乎是一样的

Arrays 我能';我找不到为什么我的C代码没有编译而另一个正在运行这两种代码几乎是一样的,arrays,string,pointers,Arrays,String,Pointers,我不明白为什么一个代码不起作用。我对它做了一些修改,但现在我不明白问题出在哪里。请帮忙 这一个没有运行: #include<stdio.h> main() { char *name; int length; char *cptr = name; //this line is different name = "DELHI"; //This line is different prin

我不明白为什么一个代码不起作用。我对它做了一些修改,但现在我不明白问题出在哪里。请帮忙

这一个没有运行:

#include<stdio.h>
main()
{
  char *name;
  int length;
  char *cptr = name;               //this line is different
  name = "DELHI";                  //This line is different
  printf ("%s\n", name);
  while(*cptr != '\0')
  {
    printf("%c is stored at address %u\n", *cptr, cptr);
    cptr++;
  }
  length = cptr - name;
  printf("\nLength of the string = %d\n", length);
}
#include<stdio.h>
main() {
  char *name;
  int length;
  char *cptr;
  name = ("DELHI");
  printf("%s\n",&name);
  cptr = name;
  while (*cptr != '\0') 
  {
    printf("%c is stored at address %u\n", *cptr, cptr);
    cptr++;
  }
  length = cptr-name;
  printf("\nLength of String = %d\n", length);
}
#包括
main()
{
字符*名称;
整数长度;
char*cptr=name;//此行不同
name=“德里”//这行不同
printf(“%s\n”,名称);
而(*cptr!='\0')
{
printf(“%c存储在地址%u\n”,*cptr,cptr);
cptr++;
}
长度=cptr-名称;
printf(“\n字符串长度=%d\n”,长度);
}
这个正在运行:

#include<stdio.h>
main()
{
  char *name;
  int length;
  char *cptr = name;               //this line is different
  name = "DELHI";                  //This line is different
  printf ("%s\n", name);
  while(*cptr != '\0')
  {
    printf("%c is stored at address %u\n", *cptr, cptr);
    cptr++;
  }
  length = cptr - name;
  printf("\nLength of the string = %d\n", length);
}
#include<stdio.h>
main() {
  char *name;
  int length;
  char *cptr;
  name = ("DELHI");
  printf("%s\n",&name);
  cptr = name;
  while (*cptr != '\0') 
  {
    printf("%c is stored at address %u\n", *cptr, cptr);
    cptr++;
  }
  length = cptr-name;
  printf("\nLength of String = %d\n", length);
}
#包括
main(){
字符*名称;
整数长度;
char*cptr;
名称=(“德里”);
printf(“%s\n”,&name);
cptr=名称;
而(*cptr!='\0')
{
printf(“%c存储在地址%u\n”,*cptr,cptr);
cptr++;
}
长度=cptr名称;
printf(“\n字符串长度=%d\n”,长度);
}
在您的第一个程序中:

char *name;
int length;
char *cptr = name;               //this line is different
这里,
name
是未初始化的,您可以将未初始化的值复制到
cptr
中。这会导致未定义的行为(以及后面实际使用
cptr

在第二个程序中:

char *cptr;
name = ("DELHI");
printf("%s\n",&name);
cptr = name;
name
已初始化,因此当您将该值复制到
cptr
中时,一切正常。不幸的是,这里的
printf
行是错误的-我不确定你的程序是如何工作的;也许只是走运而已。你想要:

printf("%s\n", name);
在循环中打印
cptr
的值时,两个程序都会导致未定义的行为。更正该print语句以使用指针值的匹配格式说明符:

printf("%c is stored at address %p\n", *cptr, (void *)cptr);

请正确格式化您的代码;这将更容易提供帮助。如果代码示例不是编译的,那么提供编译器错误和代码示例是公平的。此外,编译器通常非常擅长告诉您出了什么问题。例如,我告诉我,您声明
main
错误(应返回int),将常量char*分配给char*,(可写字符串),并且在本应使用
%p
时使用了
%u
格式说明符。很抱歉,我是新来的,不知道