如何使用指向该数组的指针打印出字符数组

时间:2015-02-21 04:53:29

标签: c arrays pointers

在我的代码中:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define BLOCKSIZE 256;

int main()
{
char text[BLOCKSIZE];

char *new_line;
new_line=strcpy(text,"hello");

int i;
for(i=0;i<sizeof(text)/sizeof(char);i++)
{
printf("%c",*(new_line+i));
}

return 0;

}

我正在尝试打印字符串&#34;你好&#34;在屏幕上使用指向char数组文本的地址的指针。但在我的代码中,我得到字符串hello继续一些垃圾值,然后导致核心转储。有人能告诉我正确的方法吗?谢谢 enter image description here

3 个答案:

答案 0 :(得分:1)

for(i=0;i < sizeof(text)/sizeof(char);i++)

text的大小为256字节,因为已为其分配了256个字节。 sizeof(text)/sizeof(char)将返回一个远大于“hello”大小的值。这就是循环在“hello”之后打印垃圾值的原因。您应该使用i < strlen(text)代替。

答案 1 :(得分:0)

您正在打印text数组的所有256个字符。您只想迭代字符串的长度,如下所示:

for(i = 0; i < strlen(text); i++)
{
   ...
}

答案 2 :(得分:0)

正如@tourniquet_grab所述,代码正在"Hello"

的末尾打印

代码将"Hello"复制到大小合适的text[],但只复制前6个char(包括终止空字符'\0')。 strcpy()返回的指针是char的第一个text的地址。剩余的250 char text尚未初始化。因此,以下打印"Hello"'\0'和250件垃圾。

  new_line = strcpy(text,"hello");
  for(i=0;i<sizeof(text)/sizeof(char);i++) {
    printf("%c",*(new_line+i));
  }

更明智地打印new_line字符串内容 - 仅限于但不包括终止空字符'\0'。此方法将更改new_line的指针。

  new_line = strcpy(text,"hello"); 
  // Continue looping until \0 reached
  while (*new_line)  {
    printf("%c", *new_line++);
  }

小点:

sizeof(char) 总是 1.编写代码非常有用。如果有的话,代码sizeof(text)/sizeof(text[0])

而不是printf("%c",*new_line++);,可以使用fputc(*new_line++, stdout)或其他1 char个函数,例如putc()