我对C.很新。
#include <string.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char* c=argv[1];
for (int i=0;i<sizeof(c);i++)
{
printf("%c\n",c[i]);
}
return 0;
}
我正在尝试编写一个程序来打印单词的每个字符。
当我尝试测试时:显示 Ť Ë 小号 Ť 当我尝试使用testtesttest时:显示: Ť Ë 小号 吨
我不明白为什么,你能告诉我为什么好吗?
答案 0 :(得分:5)
两个问题:在指针上使用sizeof
运算符会返回指针的大小而不是指向的大小。如果你想要字符串的长度,你应该使用strlen
。
第二个问题是如果您的程序没有参数会发生什么。然后argv[1]
将为NULL
。
答案 1 :(得分:3)
sizeof
运算符返回操作数类型的大小。 c
的类型为char *
,因此sizeof(c)
将返回char *
的大小而不是字符串。您应该使用strlen(c)
。
答案 2 :(得分:3)
sizeof(c)
是c
使用的内存大小,是char*
,即char
上的指针。此类型占用4个字节的内存,因此t e s t
(4个字符)。你想要的是strlen
,它给你一个字符串的长度。
#include <string.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
char* c=argv[1];
int length = strlen(c);
for (int i=0;i<length;i++)
{
printf("%c\n",c[i]);
}
return 0;
}
您还应该测试您的程序至少获得一个参数。 argc
的长度为argv
,因此您需要确保argc > 1
。