开发者

Simple modification of C strings using pointers

开发者 https://www.devze.com 2023-01-01 10:20 出处:网络
I have two pointers to the same C string.If I increment the second pointer by one, and assign the value of the second pointer to that of the first, I expect the first character of the first string to

I have two pointers to the same C string. If I increment the second pointer by one, and assign the value of the second pointer to that of the first, I expect the first character of the first string to be changed. For example:

#include "stdio.h"

int main() {
  char* original_str = "ABC";        // Get pointer to "ABC"
  char* off_by_one = original_str;   // Duplicate p开发者_开发技巧ointer to "ABC"
  off_by_one++;                      // Increment duplicate by one: now "BC"
  *original_str = *off_by_one;       // Set 1st char of one to 1st char of other
  printf("%s\n", original_str);      // Prints "ABC" (why not "BBC"?)
  *original_str = *(off_by_one + 1); // Set 1st char of one to 2nd char of other
  printf("%s\n", original_str);      // Prints "ABC" (why not "CBC"?)

  return 0;
}

This doesn't work. I'm sure I'm missing something obvious - I have very, very little experience with C.

Thanks for your help!


You are attempting to modify a string literal. String literals are not modifiable (i.e., they are read-only).

A program that attempts to modify a string literal exhibits undefined behavior: the program may be able to "successfully" modify the string literal, the program may crash (immediately or at a later time), a program may exhibit unusual and unexpected behavior, or anything else might happen. All bets are off when the behavior is undefined.

Your code declares original_string as a pointer to the string literal "ABC":

char* original_string = "ABC";

If you change this to:

char original_string[] = "ABC";

you should be good to go. This declares an array of char that is initialized with the contents of the string literal "ABC". The array is automatically given a size of four elements (at compile-time), because that is the size required to hold the string literal (including the null terminator).


The problem is that you can't modify the literal "ABC", which is read only.

Try char[] original_string = "ABC", which uses an array to hold the string that you can modify.

0

精彩评论

暂无评论...
验证码 换一张
取 消