相关疑难解决方法(0)

为什么要使用strncpy而不是strcpy?

编辑:我添加了示例的源代码.

我遇到了这个例子:

char source[MAX] = "123456789";
char source1[MAX] = "123456789";
char destination[MAX] = "abcdefg";
char destination1[MAX] = "abcdefg";
char *return_string;
int index = 5;

/* This is how strcpy works */
printf("destination is originally = '%s'\n", destination);
return_string = strcpy(destination, source);
printf("after strcpy, dest becomes '%s'\n\n", destination);

/* This is how strncpy works */
printf( "destination1 is originally = '%s'\n", destination1 );
return_string = strncpy( destination1, source1, index );
printf( "After strncpy, destination1 becomes '%s'\n", destination1 );
Run Code Online (Sandbox Code Playgroud)

哪个产生了这个输出: …

c buffer-overflow c89 strcpy strncpy

77
推荐指数
5
解决办法
17万
查看次数

将字符串分配给char数组

我想知道为什么第一个语句有效,为什么不用c ++中的第二个语句

char a[10]="iqbal";  // it works

a="iqbal"; // does not work 
Run Code Online (Sandbox Code Playgroud)

c++

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

字符串指针和c中的字符数组

我刚开始学习C并发现了一些关于字符串指针和字符串(char数组)的混淆.任何人都可以帮我清醒一下吗?

// source code
char name[10] = "Apple";
char *name2 = "Orange";

printf("the address of name: %p\n", name);
printf("the address of the first letter of name: %p\n", &(*name));
printf("first letter of name using pointer way: %c\n", *name);
printf("first letter of name using array way: %c\n", name[0]);
printf("---------------------------------------------\n");
printf("the address of name2: %p\n", name2);
printf("the address of the first letter of name2: %p\n", &(*name2));
printf("first letter of name2 using pointer way: %c\n", *name2);
printf("first letter of name2 using array way: %c\n", …
Run Code Online (Sandbox Code Playgroud)

c string pointers compiler-errors

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

c中的字符串文字

为什么下面的代码是非法的?

typedef struct{
   char a[6];
} point;

int main()
{
   point p;
   p.a = "onetwo";
}
Run Code Online (Sandbox Code Playgroud)

它与文字的大小有什么关系吗?或者在声明后将字符串文字分配给char数组是否违法?

c

7
推荐指数
3
解决办法
9122
查看次数

为什么更改字符串的字符不能提供所需的字符?

我正在尝试使用字符文字初始化后编辑字符串,如下所示:

int main() {
    char str1[10] = "hello";
    str1[0] = "b";
    printf("%s\n", str1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是"dello",即"d"而不是"b".同样,下面只是废话.

int main() {

    char str1[10];

    str1[0] = "h";
    str1[1] = "e";
    str1[2] = "l";
    str1[3] = "l";
    str1[4] = "o";

    printf("%s\n", str1);
}
Run Code Online (Sandbox Code Playgroud)

我发现一个StackOverflow 帖子提到这应该导致段错误或访问冲突错误,但它并没有真正解释原因.

c

0
推荐指数
1
解决办法
87
查看次数

在switch或if else块中分配字符串

我试图在gregorian日历上创建一个程序,但是当我尝试在if else块中分配月份名称以及切换大小写时,codeblocks在运行时停止响应.

 int main()
{
    int month,year;
    scanf("%d %d",&month,&year);
    char month1[10];
    if(month==1)
        month1[10]="January";
    else if(month==2)
        month1[10]="February";
    else if(month==3)
        month1[10]="March";
    else if(month==4)
        month1[10]="April";
    else if(month==5)
        month1[10]="May";
    else if(month==6)
        month1[10]="June";
    else if(month==7)
        month1[10]="July";
    else if(month==8)
        month1[10]="August";
    else if(month==9)
        month1[10]="September";
    else if(month==10)
        month1[10]="October";
    else if(month==11)
        month1[10]="November";
    else if(month==12)
        month1[10]="December";
    printf("%s %d",month1,year);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

类似地,当我习惯在switch case中分配字符串值时,也发生了运行时错误

main()
{
    int month,year;
    scanf("%d %d",&month,&year);
    char month1[15];
    switch(month)
    {
    case 1:
        month1[15]="January";
        break;
    case 2:
        month1[15]="February";
        break;
    case 3:
        month1[15]="March";
        break;
    case 4:
        month1[15]="April";
        break;
    case …
Run Code Online (Sandbox Code Playgroud)

c

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

标签 统计

c ×5

buffer-overflow ×1

c++ ×1

c89 ×1

compiler-errors ×1

pointers ×1

strcpy ×1

string ×1

strncpy ×1