标签: strlen

在C中使用fgets函数

我编写自己的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捕获的用户输入是否等于"退出"?谢谢!

c unix shell fgets strlen

4
推荐指数
1
解决办法
8113
查看次数

PHP 插入多个空格

我有一些数据需要清理成固定长度的格式。我正在使用 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 个字符。

任何帮助解决这个问题将不胜感激。

php spaces explode strlen

4
推荐指数
1
解决办法
7274
查看次数

运行简单的字符串C程序时出现总线错误

我正在运行这个简单的程序,我得到的输出是"总线错误".使用一些调试语句我发现它发生的点是在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编译器运行它.如果我需要提供更多规格,请告诉我.

谢谢!

c string strlen bus-error

4
推荐指数
2
解决办法
5789
查看次数

strlen函数给出错误的值

你好我每个人都写过代码

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停止的空间是我应该做的感谢后,计数

c arrays strlen

4
推荐指数
1
解决办法
4411
查看次数

mips 组件的字符串长度

每当我运行以下代码时:

#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)

assembly strlen qtspim

4
推荐指数
1
解决办法
4万
查看次数

C编程 - strlen的功能

我正在尝试理解一些字符串函数,以便我可以在以后的编码项目中更有效地使用它们,所以我在下面设置了简单的程序:

#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)

c string strlen

4
推荐指数
1
解决办法
8881
查看次数

'strlen' 的传递参数 1 的符号不同

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)

c strlen

4
推荐指数
2
解决办法
2万
查看次数

了解用于 strlen 优化的幻数 0x07EFEFEFF

我偶然发现了有关用于's 优化的幻数 0x07EFEFEFF 的利用的答案,以下strlen是最佳答案所说的内容:

看看魔法位。第 16、24 和 31 位为 1。第 8 位为 0。

  • 第 8 位代表第一个字节。如果第一个字节不为零,则此时第 8 位变为1。否则就是0
  • 第 16 位代表第二个字节。一样的逻辑。
  • 第 24 位代表第三个字节。
  • 第 31 位代表第四个字节。

不过,如果我计算result = ((a + magic) ^ ~a) & ~magica = 0x100,我发现result = 0x81010100,这意味着根据上面回答者,第二个字节a等于0,这显然是错误的。

我错过了什么?

谢谢!

c assembly bit-manipulation strlen

4
推荐指数
1
解决办法
253
查看次数

std::strlen 如何在内部工作?

我一直在努力理解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)

c++ strlen

4
推荐指数
1
解决办法
234
查看次数

PHP 中 strlen() 函数的源代码在哪里?

我正在浏览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 上 …

php strlen php-internals

4
推荐指数
1
解决办法
509
查看次数

标签 统计

strlen ×10

c ×6

assembly ×2

php ×2

string ×2

arrays ×1

bit-manipulation ×1

bus-error ×1

c++ ×1

explode ×1

fgets ×1

php-internals ×1

qtspim ×1

shell ×1

spaces ×1

unix ×1