相关疑难解决方法(0)

在另一个函数中修改char*?(分段故障)

我正在尝试修改main(tab)中声明的char数组.所以我将它发送到modify_tab并修改它.但它不起作用并向我发送分段错误.这是我的代码:

  1?void    my_putstr(char *str)
  2?{
  3?  int   i;
  4?
  5?  i = 0;
  6?  while (str[i] != '\0')
  7?    {
  8?      write(1, &str[i], 1);
  9?      i++;
 10?    }
 11?}
 12?
 13?void    modify_tab(char *tab)
 14?{
 15?  char  *map;
 16?
 17?  map = tab;
 18?  map[3] = 'a';
 19?  my_putstr(map);
 20?}
 21?
 22?void    main()
 23?{
 24?  char  *tab;
 25?
 26?  tab = "0123456789\n\0";
 27?  my_putstr(tab);
 28?  modify_tab(tab);
 29?}
Run Code Online (Sandbox Code Playgroud)

c arrays segmentation-fault

-2
推荐指数
1
解决办法
139
查看次数

C中的字符串差异

可能重复:
修改C字符串常量?

使用malloc时char*str有什么区别?

int i;
char *s =  (char*)malloc(sizeof(char)*27); 
for(i=0;i<26;i++)
  s[i]='a'+i;
s[26]='\0';
printf("%s\n",s);
reverse(s);
printf("%s\n",s);
Run Code Online (Sandbox Code Playgroud)

其中reverse()是

void reverse(char *str)
{
  int i,j=strlen(str)-1;
  char tmp;
  for(i=0;i<j;i++,j--)
  {
    tmp=str[i];
    str[i]=str[j];
    str[j]=tmp;
  }   
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但使用时

char *t = "new string";
printf("%s\n",t);
reverse(t);
printf("%s\n",t);
Run Code Online (Sandbox Code Playgroud)

我得到一个段错误,调试器说它是反向的strlen.将char*t更改为char t []可以正常工作.是什么赋予了?

c string pointers

-3
推荐指数
1
解决办法
106
查看次数

为什么此代码会产生分段错误?

在第18行,我在第一次迭代(i = 0)中得到一个seg错误.

#include <stdio.h>

int main(void) {
    char* str = "mono";

    int length = 0;
    int i;

    for (i = 0; ; i++) {
        if (str[i] == '\0') {
            break;
        } else {
            length++;
        }
    }
    for (i = 0; i < length / 2; i++) {
        char temp = str[length - i - 1];
        str[length - i - 1] = str[i]; // line 18
        str[i] = temp;
    }

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

我写这个算法来反转一个字符串.

c

-3
推荐指数
1
解决办法
73
查看次数

StrCat不使用Single Char String - C.

我正在使用下面的代码在我的字符串中添加一些"0"字符,但似乎存在问题并且程序将崩溃.一切似乎都是逻辑但我不知道问题出在哪里?

#include <stdlib.h>
#include <string.h>

int main()
{
    char *Ten; int i=0; Ten = malloc(12);
    Ten="1";
    for (i=0;i<10;i++)
        strcat(Ten,"0");

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

c

-3
推荐指数
1
解决办法
170
查看次数

可以修改字符串文字和非字符串非复合文字吗?

字符串文字是左值,它打开门以修改字符串文字.

来自C in a Nutshell:

在C源代码中,文字是表示固定值的标记,可以是整数,浮点数,字符或字符串.文字的类型由其值和符号决定.这里讨论的文字不同于C99标准中引入的复合文字.复合文字是普通的可修改对象,类似于变量.

虽然 C不严格禁止修改字符串文字,但您不应尝试这样做.首先,编译器将字符串文字视为常量,可将其置于只读存储器中,在这种情况下,尝试的写操作会导致错误.另一方面,如果程序中使用了两个或多个相同的字符串文字,编译器可能会将它们存储在同一位置,因此当您访问另一个时,修改它会导致意外结果.

  1. 第一段说"C中的字面值表示固定值".

    • 这是否意味着不应修改文字(复合文字除外)?

    • 由于字符串文字不是复合文字,是否应修改字符串文字?

  2. 第二段说"编译器不会严格禁止修改字符串文字".那么字符串文字应该被修改吗?
  3. 这两段是否相互矛盾?我怎么理解他们?

  4. 可以修改既不是复合文字也不是字符串文字的文字?

c literals string-literals

-3
推荐指数
2
解决办法
206
查看次数

C/C++ 中指向 char 初始化的指针

我无法找到这个问题的答案(如果是重复的话,我看起来很抱歉)。据我所知,在 C 中初始化 char 数组时大致有两种方法:

char[] a = "Hello";

char * b = "Hello";
Run Code Online (Sandbox Code Playgroud)

这些实现了相同的结果,但“b”的第二次初始化让我感到困惑。我理解“a”的初始化,因为它有点相当于*(char *a) = "Hello" 假设内存已分配等等...但是“b”初始化的语法在我看来就像“b”是一个指针,指向地址“Hello”当然没有任何意义,除非使用 ASCII 值。据我所知,对于整数或其他数据类型,没有与 'b 的初始化等效的东西。如果有人能提供解释那就太好了!我已经使用 C 很长一段时间了,这个问题总是让我有点困扰,我一直无法想到/找到答案

c c++ pointers char

-3
推荐指数
1
解决办法
133
查看次数

对malloced字符串的赋值行为很奇怪

这是代码,它是C代码.并请说明="字符串"的返回值

    char * p = (char*) malloc(sizeof(char) * 100);
    p = "hello";   
    *(p+1) = '1';
    printf("%s", p);
    free(p);
Run Code Online (Sandbox Code Playgroud)

c

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

关于C中Memset的简单问题

我是C的前任,所以请耐心等待我; 我知道我可以将数组语句作为*cc[];

我的问题是关于memset:

  char str[] = "hello!";
  memset (str,'-',2);
  puts (str);
Run Code Online (Sandbox Code Playgroud)

工作良好.但:

char *str = "hello!";
  memset (str,'-',2);
  puts (str);
Run Code Online (Sandbox Code Playgroud)

不工作,我知道char *str = ...是一个正常的数组语句.

如果有人可以帮我这个,我谢谢你!

c memset

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