我编写自己的UNIX Shell的任务之一.为了接收来自用户的输入,我使用fgets将输入捕获为字符串,但我不确定它是如何工作的.当我跑:
char command[50];
fgets(command, sizeof(command), stdin);
printf("Your Command: %s", &command);
int length = strlen(command);
printf("Length of String: %d\n", length);
Run Code Online (Sandbox Code Playgroud)
让我说我的输入是"退出".strlen说字符串是5个字符长,而不是4个字符.我想做这个:
if( (strcmp(command, "exit")) == 0 ){
doSomething();
}
Run Code Online (Sandbox Code Playgroud)
但命令永远不会等于我想要它的字符串; 就像它有一个我不确定的未知角色.最后是空字符吗?如何更改if语句以检查用fgets捕获的用户输入是否等于"退出"?谢谢!
我有一些数据需要清理成固定长度的格式。我正在使用 PHP 获取数据,将其隐藏,然后放回原处,但它没有按计划工作。数据中间的每一块都有一个特定的点,该点应该有空格以将长度增加到适当的字符数。我用来执行此操作的代码是:
while ($row = mysql_fetch_array($databasetable)) {
$key = $row['KEY'];
$strlength = strlen($key);
while ($strlength < 33) {
$array = explode(' TA',$key);
$key = $array[0] . ' TA' . $array[1];
$strlength++;
}
}
Run Code Online (Sandbox Code Playgroud)
它需要一个'TA'并在它之前添加两个空格,冲洗并重复直到总长度为33,但是当我输出值时,它只返回一个空格。有趣的是,即使它显示一个空格,它也会返回 33 的 strlen,即使它不显示 33 个字符。
任何帮助解决这个问题将不胜感激。
我正在运行这个简单的程序,我得到的输出是"总线错误".使用一些调试语句我发现它发生的点是在strcat()调用.
#include<stdio.h>
#include<string.h>
main()
{
char *s = "this is ";
char *s1 = "me";
strcat(s,s1);
printf("%s",s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在MAC,64位操作系统上使用gcc编译器运行它.如果我需要提供更多规格,请告诉我.
谢谢!
你好我每个人都写过代码
char sentence[100];
scanf("%s" ,sentence);
char * ptrs = sentence ;
printf("%d", strlen(ptrs));
Run Code Online (Sandbox Code Playgroud)
假设我进入
john is a boy
Run Code Online (Sandbox Code Playgroud)
该strlen()功能是给我值4停止的空间是我应该做的感谢后,计数
每当我运行以下代码时:
#counts length of a string
.data
.data
string: .asciiz "Hello"
printedMessage: .asciiz "The length of the string: "
.text
main:
la $a0, string # Load address of string.
jal strlen # Call strlen procedure.
jal print
addi $a1, $a0, 0 # Move address of string to $a1
addi $v1, $v0, 0 # Move length of string to $v1
addi $v0, $0, 11 # System call code for message.
la $a0, printedMessage # Address of message.
syscall
addi $v0, $0, …Run Code Online (Sandbox Code Playgroud) 我正在尝试理解一些字符串函数,以便我可以在以后的编码项目中更有效地使用它们,所以我在下面设置了简单的程序:
#include <stdio.h>
#include <string.h>
int main (void)
{
// Declare variables:
char test_string[5];
char test_string2[] = { 'G', 'O', '_', 'T', 'E', 'S', 'T'};
int init;
int length = 0;
int match;
// Initialize array:
for (init = 0; init < strlen(test_string); init++)
{ test_string[init] = '\0';
}
// Fill array:
test_string[0] = 'T';
test_string[1] = 'E';
test_string[2] = 'S';
test_string[3] = 'T';
// Get Length:
length = strlen(test_string);
// Get number of characters from string 1 in string …Run Code Online (Sandbox Code Playgroud) 我strlen()在我的项目中使用调用,直到现在我编译我的项目没有-Wall编译器选项。但是当我开始使用时,-Wall我遇到了很多编译器警告。80% 是 strlenchar *与const char *警告。
我知道对所有strlen()调用进行类型转换。有没有其他方法可以抑制以下警告?
./Proj.c:3126: warning: pointer targets in passing argument 1 of
'strlen' differ in signedness`
C:/staging/usr/include/string.h:397: note: expected 'const char *' but
argument is of type 'unsigned char *'`
Run Code Online (Sandbox Code Playgroud) 我偶然发现了有关用于's 优化的幻数 0x07EFEFEFF 的利用的答案,以下strlen是最佳答案所说的内容:
看看魔法位。第 16、24 和 31 位为 1。第 8 位为 0。
- 第 8 位代表第一个字节。如果第一个字节不为零,则此时第 8 位变为
1。否则就是0。- 第 16 位代表第二个字节。一样的逻辑。
- 第 24 位代表第三个字节。
- 第 31 位代表第四个字节。
不过,如果我计算result = ((a + magic) ^ ~a) & ~magic用a = 0x100,我发现result = 0x81010100,这意味着根据上面回答者,第二个字节a等于0,这显然是错误的。
我错过了什么?
谢谢!
我一直在努力理解std::strlen()但徒劳无功:
AFAIKstrlen()以字节为单位返回以空字符结尾的常量字符串中的字符数。如果它不是以 null 结尾的,则行为是未定义的。除此之外,还可以。
所以:std::strlen("");是 0。
但是,因为我已经在 www.cppreference.com 上阅读过它,所以我发现了一个可能的实现:
// This is from: https://en.cppreference.com/w/cpp/string/byte/strlen
std::size_t strlen(const char* start) {
const char* end = start;
while(*++end != 0);// I think this causes UB
return end - start;
}
Run Code Online (Sandbox Code Playgroud)
但是如果我运行它:
int main()
{
const char cp1[] = "";
const char cp2[] = "\0";
const char cp3[] = "\0Hello";
const char cp4[] = "H\0ello";
const char cp5[1] = {};// UB?
const char cp6[] = {'\0'};
const char …Run Code Online (Sandbox Code Playgroud) 我正在浏览php-src/Zend/zend_API.c,但在任何地方都找不到PHP 中该函数的源代码strlen()。搜索代码库并没有真正的帮助,因为到处都是 libc strlen。谷歌搜索也没有太大帮助。
我尝试使用Vulcan Logic Dumper扩展来检查引擎盖下发生的事情。
我尝试了以下代码作为测试:
<?php
strlen("foo"); strpos("foo", "f");
Run Code Online (Sandbox Code Playgroud)
这是我得到的:
寻找切入点
来自位置的分支分析:0
发现 1 次跳跃。(代码 = 62)位置 1 = -2
文件名:/tmp/test.php
函数名:(空)
操作数:7
编译变量:无
行 #* EIO op fetch ext 返回操作数
-------------------------------------------------- ---------------------
3 0 E > 回声 3
4 1 INIT_FCALL 'strpos'
2 SEND_VAL '富'
3 SEND_VAL 'o'
4 DO_CALL $0
5 回声 $0
6 > 返回 1
注意如何strpos()显示为函数调用,而不是strlen(). 所以我尝试了这个(顺便说一下,这是在 PHP 7.4 上 …