这是我的代码,当我运行它时,我遇到了分段错误。
char *s = NULL;
s = (char *)malloc(5*sizeof(char));
s[0]='10';
s[1]='20';
printf("%s",s[1]);
请告诉错误的位置以及发生这种情况的原因。我对程序的意图是动态创建一个字符串,逐字节地给它一些值并逐字节地打印它们。
有没有办法将整数值添加到字符串。因为,我有一个情况,字符串的长度是在字符串的第一部分后跟数据。请在C中建议任何方法。
答案 0 :(得分:2)
您正在s[0]
和s[1]
中存储多字节字符。除此之外,使用%c
格式说明符来打印字符。
答案 1 :(得分:2)
printf("%s", s[1]);
表示从地址(int)' 20'开始打印字符串。这显然是一个错误。应该是:s[2]='\0'; printf("%s", s+1 /*&s[1]*/);
答案 2 :(得分:1)
1。s[0]
是char
,您无法为其分配10
。 (它将编译并发出警告,但它没有按照您的预期进行编译)
2. printf("%s",s[1]);
也会导致未定义的行为,因为后跟s[1]
的字符串不会以空值终止。
答案 3 :(得分:0)
Don't cast malloc和family的结果。
s[0]
和s[1]
只占用一个字节值。
然后你的字符串不是以空字符结尾的字符串。
试试这个。
s[0]='h';
s[1]='i';
s[2]='\0';
printf("%s",s);
%s
用于打印字符串。使用%c
打印角色。
printf("%c",s[1]);
您可以像这样使用整数存储到char
数组
char *s=malloc(123);
sprintf(s,"%d",integer_value);
然后使用strcat
将字符串存储在其中。
传递给这样的函数使用,
void func(char *);
main() {
. . .
func(s);
. . .
}
void func(char *str)
{
// do what you need
}
如果在整数和字符串斜杠之间可用(例如在评论中),则可以使用strtok
函数。在使用strtok
函数之前,请为您的字符串备份。它会修改您的内容。或者你可以这样使用,
sscanf(str,"%d / %s",&int,string);
现在字符串的值为"hello"
。
char s[10];
sprintf(s,"%d",int);
strcat(str,s);
试试这个,
int fd;
char str[]="data7";
char st[12];
sscanf(str,"%[^ 0-9] %d",st,&fd);
printf("st:%s\tfd:%d\n",st,fd);