标签: c-strings

在C中返回一个char指针

我正在开发一种用C语言编写的文件共享程序.有一个函数可以读取数据文件并将数据存储到字符串中,并将此字符串返回给main函数,main函数发送回客户端.代码如下所示

char* ListFiles(){
    FILE *fp;
    char file[30];
    char *f;
    if((fp=fopen("list","r"))==NULL)  
    {
        ...
    }
    while (!feof(fp))
    {
        fgets(file,50,fp);
    }
    fclose(fp);
    f=file;
    printf("%s",f); //get display!!!
    return f;
}
int main(){
      char *files;
      ...
      ...
      files=ListFiles();
      printf("%s",files); //nothing display!!
      sent();
}
Run Code Online (Sandbox Code Playgroud)

但是,此方法不起作用.没有任何显示,当然也没有发送任何内容.但我确实在函数ListFiles()中得到了正确的显示.我不知道发生了什么.我也使用strcpy(),它仍然无法正常工作.

c pointers c-strings

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

如何将C字符串转换为D字符串?

如果我有一个C字符串,它是一个指向空终止字符数组的指针,我该如何将它转换为常规D字符串?

我想知道这个的原因是因为我目前正在使用外部C库,在错误时返回C字符串.

string casting d c-strings

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

当由"auto"推断时,""的确切类型是什么?

在这一行:

auto a = "Hello World";
Run Code Online (Sandbox Code Playgroud)

什么是确切的类型a?我猜char[]或者const char* const我不确定.

c++ c-strings auto c++11

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

固定长度空字符串中的空字符在哪里?

所以我好奇地阅读了一些C代码; 假设我们有以下代码:

char text[10] = "";
Run Code Online (Sandbox Code Playgroud)

那么C编译器在哪里放置空字符?

我可以想到3种可能的情况

  1. 在一开始,然后是9个字符的任何曾经在内存中
  2. 到最后,所以9个字符的垃圾,然后一个尾随 '\0'
  3. 它完全用10填充 '\0'

问题是,根据两种情况,是否有必要'\0'在执行时添加尾随strncpy.如果是第2和第3种情况,那么这不是绝对必要的,而是一个好主意; 如果它是案例1,那么这是绝对必要的.

这是什么?

c c-strings

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

C - 我可以从char*创建一个const char*变量吗?

我想要这样做的原因是因为我想逐行读取文件,并且每行检查它是否与正则表达式匹配.我正在使用getline()函数,它将行放入一个char *类型变量.我试图用来regexec()检查正则表达式匹配,但是这个函数要求你提供匹配的字符串作为a const char *.

所以我的问题是,我可以创建const char *一个char *?或者是否有更好的方法来解决我在这里要解决的问题?

编辑:我被要求提供一个例子,我没有想到并为首先没有给出一个而道歉.在写这篇文章之前,我确实读过@chqrlie的答案.以下代码给出了分段错误.

#define _GNU_SOURCE                                                                                                
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <stdbool.h>
#include <regex.h>

int main() {
  FILE * file = fopen("myfile", "r");
  char * line = NULL;
  size_t len = 0;
  ssize_t read;

  regex_t regex;
  const char * regexStr = "a+b*";

  if (regcomp(&regex, regexStr, 0)) {
    fprintf(stderr, "Could not compile regex \"%s\"\n", regexStr);
    exit(1);
  }

  while ((read = …
Run Code Online (Sandbox Code Playgroud)

c regex c-strings getline string-literals

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

在C中的while循环中使用指针发布增量

我正在写strcat函数

/*appends source string to destination string*/

#include <stdio.h>

int main()
{
    char srcstr[100], deststr[100];
    char *psrcstr, *pdeststr;

    printf("\n Enter source string: ");
    gets(srcstr);
    printf("\n Enter destination string: ");
    gets(deststr);

    pdeststr = deststr;
    psrcstr = srcstr;

    while(*pdeststr++)
        ;
    while(*pdeststr++ = *psrcstr++)
        ;

    printf("%s", deststr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于srcstr = " world"deststr = "hello"我得到的hello,我希望看到hello world,这是我所看到的,如果我第一次改变while这样

while(*pdeststr);
    pdeststr++;
Run Code Online (Sandbox Code Playgroud)

为什么我不能在第一行中写所有内容while,就像在第二行一样while

c c-strings

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

为什么指向c-string中元素的指针不返回元素?

我试图理解指针在这里是如何工作的.该findTheChar功能搜索str该角色chr.如果chr找到,则返回指向str首次找到字符的指针,否则nullptr(未找到).我的问题是为什么函数打印"llo"而不是"l"?虽然我写的代码main返回"e"而不是"ello"

#include <iostream>
using namespace std;

const char* findTheChar(const char* str, char chr)
{
    while (*str != 0)
    {
        if (*str == chr)
            return str;
        str++;
    }
    return nullptr;
}

int main()
{
    char x[6] = "hello";
    char* ptr = x;
    while (*ptr != 0)
    {
        if (*ptr == x[1])
            cout << *ptr << endl; //returns e
            ptr++; …
Run Code Online (Sandbox Code Playgroud)

c++ string pointers c-strings

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

理解strlen函数 - 将const char*s赋值给const char*sc

下面是根据"标准C库,strlen.c的实现,

size_t strlen(const char *s){
   const char *sc;
   for(sc = s; *sc != '\0'; ++sc)

   return (sc-s);  }
Run Code Online (Sandbox Code Playgroud)

我对合法性的理解sc = s是否正确?

sc=s是一个合法的赋值,因为两个变量都被声明为const,都保护s指向的对象.在这种情况下,改变sc或s都指向但是任何赋值(或引用?)*s或者sc是非法的是合法的.

c memory pointers c-strings

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

字符串末尾的空字符 '\0'

我有以下代码。

#include <stdio.h>
#include <string.h>

#define MAXLINE 1000

int main()
{
    int i;
    char s[MAXLINE];

    for (i = 0; i < 20; ++i) {
        s[i] = i + 'A';
        printf("%c", s[i]);
    }

    printf("\nstrlen = %d\n", strlen(s)); // strlen(s): 20
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我应该写吗

s[i] = '\0';
Run Code Online (Sandbox Code Playgroud)

在循环执行后显式标记字符串的结尾还是自动完成?没有s[i] = '\0';函数 strlen(s) 返回正确的值 20。

c string null c-strings null-terminated

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

是否必须为字符数组的初始化提供 '\0'?

请看代码:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char name[10] = {'L','e','s','s','o','n','s'}; // did not add `\0`
    char c;

    for (int i = 0; name[i] != '\0'; i++)
    {
        c = name[i];
        printf("%c", c);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我最后没有给\0,但仍然有效。

我的问题:\0在上面的情况下是自动添加的吗?

编辑:在这些情况下会发生什么:

  1. char name[7] = {'L','e','s','s','o','n','s'};
  2. char name[8] = {'L','e','s','s','o','n','s'};

我很抱歉编辑问题。

c arrays c-strings

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

标签 统计

c-strings ×10

c ×7

pointers ×3

string ×3

c++ ×2

arrays ×1

auto ×1

c++11 ×1

casting ×1

d ×1

getline ×1

memory ×1

null ×1

null-terminated ×1

regex ×1

string-literals ×1