如何在c语言中找到字符串的位模式
我有以下两个问题如何在c语言中找到字符串的位模式,c,C,我有以下两个问题 给定像char*str=“9999999999”这样的语句;编译器如何决定在堆栈上分配多少空间 如何遍历str指向的内存并确定内存中各个位的值 “9999999999”不在堆栈上。指针可能在堆栈上,编译器知道指针应该有多大。“99999999999”实际上有一个空终止符,可以让您知道它何时在末尾 要在每个位上迭代,可能类似于: for(i=0; str[i]; i++) // str[i] will evaluate to false(0) when that charact
“9999999999”
不在堆栈上。指针可能在堆栈上,编译器知道指针应该有多大。“99999999999”
实际上有一个空终止符,可以让您知道它何时在末尾for(i=0; str[i]; i++) // str[i] will evaluate to false(0) when that character is the null
for(j=7; j>=0; j--)
printf("%d", (str[i] >> j) & 0x01)
但我更喜欢用十六进制表示而不是二进制表示,所以我只需要
for(i=0; str[i]; i++)
print("%X ", str[i])
for(i = 0; i < strlen(str); i++)
{
for(j = 7; j >= 0; j--)
printf("%d", (str[i] & (1 << j)) == 0 ? 0 : 1);
printf(" ");
}
for(i=0;i=0;j--)
堆栈上的printf(“%d”)、(str[i]&(11)sizeof(char*)。大约1:在编译时,编译器将能够知道“char”在您的计算机和语言环境中代表什么,以及用于存储“9999999999999”的字节数(+终止的空字符,它也因计算机/实现而异,因此依赖于计算机)@OlivierDulac它是char*而不是char。char*应该能够指向任意大小的内存。我感兴趣的是了解编译器如何确定指针的指向大小而不是大小itself@Jimm:如我所说,它知道1个字符的大小,以及“9999999999”中有多少个字符你给它的静态字符串,以及终止null的大小。因此,它在编译时知道它的大小。(如果我误解了你的评论,请原谅我?)。但是cmd是正确的:字符串本身不在堆栈上^^。对不起。有什么特别的原因要从str[1]开始而不是str[0]?@Jimm“第二个字符中的第二位”。您可以使用str[0]
检查第一个字节内的位。for循环是否会给我诸如“9”之类的值的位模式?@Jimm检查此问题的编辑。还有另一个循环用于迭代和打印单个位。我希望str“99..”指向的堆上分配的每个字节的位模式
不是在堆上分配的。它是一个字符串文字,可能存在于数据节中。提供了更多信息。@Jimm更改了位模式sizeof
运算符不返回以位为单位的操作数大小。lol,你们真的很喜欢在几秒钟内捕获内容