在我的代码中:
#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继续一些垃圾值,然后导致核心转储。有人能告诉我正确的方法吗?谢谢
答案 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()